【问题标题】:Dissmiss UITableViewController from button in TableViewCell从 UITableViewCell 中的按钮关闭 UITableViewController
【发布时间】:2020-01-17 23:59:33
【问题描述】:

我有一个 UITableViewController,它有一个带有 UIButton 的标题视图类,我已在界面生成器中链接了该类。我让它工作得很好,所以当你点击按钮时,代码就会触发。

但是,当您点击此按钮时,我不知道该怎么写才能关闭表格视图。

class headerCell: UITableViewCell {
    @IBAction func exit () {
        print("got pressed")
        // tried: MyTableView().dismiss(animated: true, completion: nil)
        // But did not work, did nothing?
    }
}

class MyTableView: UITableViewController {

// All the code for the tableView is here...

}

【问题讨论】:

  • 提示:使用闭包。
  • 谢谢,我能得到更多提示吗?
  • 是什么阻止你搜索闭包 UITableViewCell?
  • 我真的很感激能回答我的问题。

标签: swift uitableview


【解决方案1】:
MyTableView().dismiss(animated: true, completion: nil)

这会创建一个全新的表格视图控制器并将其关闭。由于它甚至从未被呈现,所以这没有任何作用

您需要关闭包含该单元格的那个。

这是一种方式:https://stackoverflow.com/a/50334803/3937

但我建议向 MyTableView 添加对标题单元格的弱引用并将其设置为构造

另外,MyTableView 是一个 ViewController,而不是一个视图。所以,MyTableViewController 是一个更好的名字。

【讨论】:

  • 好的,那么如何从 tableViewCell 类中的 IBAction 访问表格视图?
  • 你想访问表视图控制器,而不是表视图。我更新了我的答案
  • 创建一个扩展来确定 TableViewController 似乎需要很多代码来关闭一个视图。我故意将其置于无所作为,以避免不得不创建一个 IBOutlet 并分配目标以在表视图上关闭。一定有更简单的方法来做到这一点?
  • 我建议了更简单的方法。将weak var MyTableView? 添加到您在构建后设置的标题单元格中。然后用它来解雇
  • 我在哪里构建它?我不知道那是什么意思。也许一些示例代码作为解决方案会有所帮助。
【解决方案2】:

在尝试了各种答案后,我发现创建 IBAction 并不是最好的方法,相反,我只是为按钮添加了一个 IBOutlet,然后在 TableViewController 中完成:

@objc func exit () {
        dismiss(animated: true, completion: nil)
    }

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell") as! headerCell
        cell.exitButton.addTarget(self, action: #selector(exit), for: .touchUpInside)
        return cell
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-18
    • 2018-01-05
    • 2013-07-11
    • 2014-12-15
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    相关资源
    最近更新 更多