以编程方式选择单元格时通知UITableViewController

时间:2016-06-11 00:13:45

标签: ios swift uitableview delegates

我的表格视图允许多个单元格选择,其中每个单元格在单击单元格内的按钮时将其自身设置为选中(类似于gmail应用程序的操作,请参见下图)。我正在寻找一种让UITableViewController知道已选择或取消选择单元格的方法,以便手动更改UINavigationItem。我希望有一种方法可以通过使用委托方法来实现,但我似乎无法找到一个。 didSelectRowAtIndexPath正在处理单元格本身的点击,不应该影响单元格的选定状态。

enter image description here

2 个答案:

答案 0 :(得分:3)

最直接的方法是为您的单元格创建我们自己的委托protocolUITableViewController将采用。将单元格出列后,还可以在单​​元格上将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设置为上述函数