从TableViewCell获取TableViewController

时间:2015-06-18 08:21:26

标签: ios swift uitableview

我有一个表格单元格的自定义类,它连接到表格单元格中的一个开关(带有一个动作),我希望能够与TableViewController进行通信以及该动作发生的路径以及细胞。最初想到的方式是,如果我可以在UITableViewCell中使用某些函数来获取表格的CellViewController,那么我的自定义类(显然)是UITableViewCell的子类。请告诉我,如果我遗失了什么。

3 个答案:

答案 0 :(得分:0)

要获取对包含视图控制器的引用,我在单元子类上添加了一个弱属性。

@property (nonatomic, weak) UITableViewController *viewController;

您可以在cellForRowAtIndexPath:

中指定此值

答案 1 :(得分:0)

用于访问TableView中的每个单元格

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as YourTableViewCell
        cell.mainTextLabel.text = self.venueService.mainCategoriesArray()[indexPath.row]
        return cell
}

在TableView中获取选定的单元格

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let indexPath = tableView.indexPathForSelectedRow();
    let currentCell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell;
    print(currentCell)
}

从TableViewCell到达TableView

self.superview //// self is TableViewCell and its superview represents TableViewController

希望有所帮助

答案 2 :(得分:0)

您应该将ViewController作为切换操作的目标。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("SwitchCell", forIndexPath: indexPath) as! SwitchTableViewCell
    cell.onSwitch.addTarget(self, action: Selector("cellSwitchDidChange:"), forControlEvents: .ValueChanged)
    cell.label.text = "This is a Switch"
    return cell
}

func cellSwitchDidChange(sender: UISwitch) {
    let origin = sender.convertPoint(CGPointZero, toView: tableView)
    let indexPath = tableView.indexPathForRowAtPoint(origin)!
    // do something
}