我正在创建一个项目,我有很多选项供用户在不同的计划中进行选择。
所以我创建了一个UITableViewCell,将UICollectionView放在一个UICollectionViewCell作为一个计划。
现在,用户只能选择一个计划。
假设用户选择了第二个计划,我需要更新UITableViewCell中的按钮的价格。
我知道我们可以重新加载tableCell并进行更新。但除了重新加载UITableViewCell
之外还有其他办法吗?让我知道除了重新加载整个tableviewcell之外的最佳方法
答案 0 :(得分:0)
在Uicollectionview的didselect方法中,获取价格显示的tableviewcell并更新按钮。
CollectionView didSelectItem method
{
NSIndexPath *indexpathoftableviewcell = [NSIndexPath indexpathForRow:1 inSection:0];
UITableViewCell *priceCell = [tableView cellForRowAtIndexPath: indexpathoftableviewcell];
UIButton *priceBtn = (UIButton*)[priceCell viewWithTag:tagOfBtn];
[priceBtn setTitle:@"43432" forControlState:UIControlStateNormal];
}
答案 1 :(得分:0)
假设您的UITableViewCell
在其中加载UICollectionView
,因此UICollectionView的DataSource和Delegate的明显选择应该是您的UICollectionViewCell。
因此,在您的TableView单元格中,您只需访问需要使用价格更新的标签,如下所示
extension MyTableViewCell : UICollectionViewDataSource {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 100
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let someCell : MyCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "your_identifier", for: indexPath) as! MyCollectionViewCell
return someCell
}
}
extension MyTableViewCell : UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as! MyCollectionViewCell
self.priceLabel.text = "\(cell.value)"
}
}
这里我假设您的CollectionViewCell
是一个自定义单元格,并且有一个名为value
的属性,用于存储计划的价格
答案 2 :(得分:0)
容纳计划(UICollectionView)& UITableViewCell中的价格(UILabel或UIButton),而不是将其作为单独的单元格
这就是背后的原因。
两者 价格和计划紧密相连。这意味着,当您更改计划时,相应的价格应该会出现,此要求可能会在未来增加,例如添加更多视图。如果您将整个部件容纳在一个UITableViewCell中,它将变得非常容易。 通过这种方式,您可以管理未来的设计证明。
关于这个问题,价格就像CustomTableViewCell中的一个IBOutlet 。只需更新
中的价格即可func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {}