- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个嵌入了 tableView
的 ViewController
类,我在其中创建了两个 cells
首先:
class CategoryTableViewCell: UITableViewCell {
//MARK:- IBOUTLETS
//MARK:-
@IBOutlet weak var collectionView: UICollectionView!
var categoryArray: [PopularCategories]! {
didSet {
self.collectionView.reloadData()
}
}
override func awakeFromNib() {
super.awakeFromNib()
collectionView.delegate = self
collectionView.dataSource = self
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: true)
}
}
我在其中创建了一个 CollectionViewCell
。在我的第二个 TableViewCell
类中,我重新加载
来自 api
的 data
。
这是 TableViewCell
类中的 collectionView
代码
extension CategoryTableViewCell: UICollectionViewDataSource, UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return categoryArray.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "CatergoriesCollectionViewCell", for: indexPath) as? CatergoriesCollectionViewCell else {
return UICollectionViewCell()
}
cell.nameLabel.text = categoryArray[indexPath.item].name
cell.image.sd_setImage(with: URL(string: categoryArray[indexPath.item].image ), placeholderImage: UIImage(named: "placeholderSmall"))
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "CatergoriesCollectionViewCell", for: indexPath) as! CatergoriesCollectionViewCell
collectionCellTapHandler?()
let id = categoryArray[indexPath.item].id
self.categroyID = id
controller.categoryId = id
controller.filterDataUsingMostPopularCategory(id: id, lat: Latitude, long: Longitude)
print("Here I can access my view controller....\(controller.categoryId)")
print(cell.nameLabel.text!, id)
}
}
}
现在,我需要在选择 collectionView
cell
项时调用 ViewController
中的函数。这是我的 ViewController
类文件中的函数,我想在选择 collectionViewCell
时访问
class OneStopShopVC: TruckerConveyBaseVC {
func searchDataFromFilteredApi() {
let param: [String : Any] = ["lat": self.latitude, "lng": self.longitude, "title": selectedTitle, "category": "\(selectedCategory)"]
print(param)
CommonUtils.showHudWithNoInteraction(show: true)
Alamofire.request(Constants.BASE_URL+"search_home_ads.php", method: .post, parameters: param, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
CommonUtils.showHudWithNoInteraction(show: false)
switch(response.result) {
case .success(_):
if let json = response.result.value as? [String:Any] {
print(json)
if let ads_list = json["ads_list"] as? [[String:Any]] {
self.adsListModel.removeAll()
let response = kSharedInstance.getArray(withDictionary: ads_list)
print(response)
self.adsListModel = response.map{ AdsListModel(with: $0) }
}
DispatchQueue.main.async {
self.reloadList()
}
}
break
case .failure(_):
print("Error")
break
}
}
}
}
这是 UITableViewDataSource 和 Delegate 中的代码
extension OneStopShopVC : UITableViewDataSource, UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return 1
} else {
return Int.getInt(self.adsListModel.count)
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section == 0 {
return 181
} else {
return 121
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return cellConfig(indexPath)
}
private func cellConfig(_ indexpath : IndexPath) -> UITableViewCell {
if indexpath.section == 0 {
guard let cell = oneStopShopTableView.dequeueReusableCell(withIdentifier: CategoryTableViewCell.cellIdentifier()) as? CategoryTableViewCell else {
return UITableViewCell()
}
cell.categoryArray = popularCategories
cell.collectionCellTapHandler = {[weak self] in
self?.filterDataUsingMostPopularCategory(id: cell.categroyID, lat: Latitude, long: Longitude)
}
cell.collectionView.reloadData()
return cell
}
else {
let cell = oneStopShopTableView.dequeueReusableCell(withIdentifier: OneStopShopTableCell.cellIdentifier()) as! OneStopShopTableCell
cell.lblPostTitle.text = String.getString(self.adsListModel[indexpath.row].post_title)
cell.lblPostedDate.text = String.getString(self.adsListModel[indexpath.row].posted_date)
cell.lblPostedExpDate.text = String.getString(self.adsListModel[indexpath.row].posted_expired_date)
cell.lblPostedDesc.text = String.getString(self.adsListModel[indexpath.row].post_desc)
cell.postedImage.sd_setImage(with: URL(string: adsListModel[indexpath.row].post_image ?? ""), placeholderImage: UIImage(named: ""))
let status = String.getString(self.adsListModel[indexpath.row].status)
if (status == "Publish") {
cell.statusLabel.text = "Published"
cell.statusLabel.textColor = #colorLiteral(red: 0.2745098174, green: 0.4862745106, blue: 0.1411764771, alpha: 1)
}
else if(status == "Banned") {
cell.statusLabel.textColor = UIColor.darkGray
}
else {
cell.statusLabel.textColor = UIColor.red
}
cell.priceLabel.text = "$\(String.getString(self.adsListModel[indexpath.row].price))"
return cell
}
}
结论:当我点击第一个 TableViewCell
类中的 CollectionViewCell
项时,我想重新加载 SecondTableViewCell
的数据。为此我需要访问 ViewController
函数以重新加载数据。我该怎么做?
最佳答案
一般来说,对于如何解决这个问题,您有多种选择,您需要根据不同的标准选择其中一种。
第一个选项是在创建闭包函数并将其分配给 viewController 中的单元格之前的答案。
第二种选择是像这样实现委托(delegate)模式:
protocol MyDelegate:class {
func doTheJob()
}
class CategoryTableViewCell: UITableViewCell, UICollectionViewDelegate {
//rest of the code...
weak var myDelegate:MyDelegate? = nil
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
myDelegate?.doTheJob()
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CategoryTableViewCell
cell.myDelegate = self
}
extension OneStopShopVC: MyDelegate {
func doTheJob() {
}
}
第三种选择可以是拥有一个负责此类逻辑的类,即某种管理类。这个类可以是一个单例,你可以从你需要的地方实例化。
一般来说,你有很多解决方案。但是您需要考虑您的需求并以最佳方式分离代码。想想 MVC、MVVM、VIPER 或任何你遵循的分离的基本原则。
P.S 你使用了一个 UITableViewCell 的实例,它是一个 View ,作为一个 ViewController,这应该为你变成一个大红旗,表明你的架构不正常。
关于ios - 如何访问 tableView 内部集合中的 ViewController 类变量和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57426768/
我正在对 tableView 是否呈现单元格进行单元测试。 我发现 tableView.cellForRow(at:) 返回 nil,而 tableView.dataSource?tableView(
我有 Tableview 用于显示客户下的食品订单。其中包含水平 UIStackview。在 UIStackView UIStackview 中很少有一/两行标签和一个用于显示订单项的UITableV
我有 Viewcontroller,我在其中设置了 ScrollView 。在 scrollview 中,我有一个 tableview,它位于 Container 中,就在容器下方,当我将 table
我想在滚动时让我的第一个单元格始终位于 tableview 的顶部。 任何帮助都是可观的。提前致谢... 最佳答案 这是为 UITableView 创建标题 View 的方法 - (UIView *)
在我的应用程序中,我点击一行,它会在其下方展开另一行。我想生成一种随机颜色,当我单击一行时,行背景会变成该颜色,而它下面的展开行会变成相同的颜色。如何让行生成相同的随机颜色? 我创建了一个函数来生成随
我正在为这个问题苦苦挣扎,所以我需要你的帮助。基本上我已经编写了一个复杂的 TableView Controller (使用 NSFetchedResults 协议(protocol)等)并且已经在我
我正在使用 JavaFx 2.2。我遇到了一个问题,我无法在 TableView 列中放置不同的组件。例如我有两列 1) 回答 2) 答案类型 如果 AnswerType 包含“Multiple Ch
试图弄清楚如何在 javafx 2 中禁用表列的重新排序? 最佳答案 这是解决方案: tblView.getColumns().addListener(new ListChangeListener()
我一直在寻找有关将数据刷新到 tableview 的信息。我试图直接修改模型,但我遇到了一个错误。我修改了模型,但表格没有刷新,只有当我移动一列时,表格才会显示修改后的值。 为了给你展示一个例子(13
给定一个TableView,我需要检测单元格上的双击。 tableView.setOnMouseClicked(new EventHandler() { @Override publi
我成功创建了一个 TableView,其中将特定列分配给了数据模型类。该程序可以将 csv 文件解析为其中并在表中正确显示所有内容。在此阶段,滚动不是问题。 然后我想选择特定行并将它们发送到另一个表。
我尝试了所有方法来用数据填充 TableView。下一个代码在表中插入一个新行,但数据没有出现在表中。我试图为此找到解释,但没有成功。 请帮忙。我不知道怎么了。 在 controller.java 中
我尝试了所有方法来用数据填充 TableView。下一个代码在表中插入一个新行,但数据没有出现在表中。我试图为此找到解释,但没有成功。 请帮忙。我不知道怎么了。 在 controller.java 中
我有一个通过 Tableview 显示玩家的应用程序。用户可以“添加”一个新玩家并输入他的姓名、高度、体重、图片等...保存后将被添加到 Tableview 中。他们还可以点击每个玩家,然后将他们带到
对于大学,我必须编写一个小应用程序,其想法是创建一个小公式集合。这个概念是有一个类别列表,选择类别后您会收到一个公式列表。选择所需的公式后,您将看到公式计算器的 View 。 我正在努力获得第一个UI
如果我只加载一个 TableView ,我的 View 中必须有两个 TableView ,它工作正常。但是当我尝试使用下面的方法加载两个表格 View 时,它给出了以下异常。 未捕获异常“NSRan
我是 JavaFx 的新手,我正在尝试创建一个 TableView ,而 fxml 是使用场景生成器创建的。如果我运行该程序,该表不会获取值。我发现这个问题在某种程度上符合我的要求( javaFX 2
是否可以对 tableView 进行反向排序?我搜索了很多解决方案,但没有任何效果。 效果就像whatsapp聊天。 一个普通的tableView是: ---------- label 1 -----
我有一个有趣的问题。我有两个 TableView ,一个在另一个里面。我有一个结构,我想用它来将数据添加到我的 TableView 中。该结构有 2 个字符串项和另一个具有 3 个字符串项的结构的数组
我正在使用的方法 func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath
我是一名优秀的程序员,十分优秀!