我的表格视图允许多个单元格选择,其中每个单元格在单击单元格内的按钮时将其自身设置为选中(类似于gmail应用程序的操作,请参见下图)。我正在寻找一种让UITableViewController
知道已选择或取消选择单元格的方法,以便手动更改UINavigationItem
。我希望有一种方法可以通过使用委托方法来实现,但我似乎无法找到一个。 didSelectRowAtIndexPath
正在处理单元格本身的点击,不应该影响单元格的选定状态。
答案 0 :(得分:3)
最直接的方法是为您的单元格创建我们自己的委托protocol
,UITableViewController
将采用。将单元格出列后,还可以在单元格上将delegate
属性设置为UITableViewController
实例。然后,单元格可以调用protocol
中的方法来通知UITableViewController
正在发生的操作,并且可以根据需要更新其他状态。这里有一些示例代码来提供这个想法(请注意,我没有通过编译器运行它,因此可能存在拼写错误):
protocol ArticleCellDelegate {
func articleCellDidBecomeSelected(articleCell: ArticleCell)
func articleCellDidBecomeUnselected(articleCell: ArticleCell)
}
class ArticleCell: UICollectionViewCell {
@IBAction private func select(sender: AnyObject) {
articleSelected = !articleSelected
// Other work
if articleSelected {
delegate?.articleCellDidBecomeSelected(self)
}
else {
delegate?.articleCellDidBecomeUnselected(self)
}
}
var articleSelected = false
weak var delegate: ArticleCellDelegate?
}
class ArticleTableViewController: UITableViewController, ArticleCellDelegate {
func articleCellDidBecomeSelected(articleCell: ArticleCell) {
// Update state as appropriate
}
func articleCellDidBecomeUnselected(articleCell: ArticleCell) {
// Update state as appropriate
}
// Other methods ...
override tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueCellWithIdentifier("ArticleCell", forIndexPath: indexPath) as! ArticleCell
cell.delegate = self
// Other configuration
return cell
}
}
答案 1 :(得分:1)
我会有一个类似于' cellButtomDidSelect'在视图控制器和' cellForRowAtIndexPath'中,将target-action设置为上述函数