【问题标题】:How to perform segue when a cell is selected?选择单元格时如何执行segue?
【发布时间】:2021-10-07 11:07:05
【问题描述】:

我对 Swift 很陌生,我想知道当用户点击其中一个表格视图单元格时如何执行 segue。

在 UITableViewCell 控制器中,我尝试输入 performSegue 并等待 Xcode 的提示,如下所示

override func setSelected(_ selected: Bool, animated: Bool) {
   if selected {
      performSegue() <- HERE
   }
   super.setSelected(selected, animated: true)
}

我找不到任何提示,所以我认为我误解了这个概念。

点击单元格时有什么方法可以执行segue?而且我还想向目的地发送一些数据,所以如果您也能提供一种将数据发送到目的地的方法,那就太好了。

提前谢谢你。

【问题讨论】:

    标签: ios swift uitableview segue


    【解决方案1】:

    代码中的转义:

    因此,首先在点击单元格(表格视图单元格)时执行某些操作的好方法是使用tableView didSelectRowAt 方法:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // Place code you want to be performed when a cell is tapped inside of here, for example:
        performSegue(withIdentifier: "identifier", sender Any?) // Make sure your identifier makes sense and is preferably something memorable and easily recognisable.
    }
    
    • segue identifier 只是为了让 swift/interface builder 知道您指的是哪个 segue。
    • sender 是导致 segue 执行的一个例子,UIButton

    接下来,您需要为 View Controller 内部的 segue 做准备,该控制器正在使用以下方法进行 segue:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Do any required setup for this segue such as passing in data loading required views and specifying how you want the segue to be performed such as if you want the view to be pushed, or presented as a popover etc... for example:
        if let vc = segue.destination as? ViewController { // Downcast to the desired view controller.
        // Configure the view controller here...
        }
    }
    

    注意:您还可以在界面构建器中创建转场,方法是从 UIButton 之类的控件拖动,然后在右侧面板的属性检查器中设置转场标识符:

    Interface Builder 中的 Segue:

    • 控制拖动,将弹出此菜单供您选择演示文稿:

    • 然后在屏幕右侧的“属性”面板中为 segue 设置一个identifier

    • 最后prepare 用于视图控制器内部的segue,它将像在代码中创建segue 一样在代码中被segue。

    此视频也可能对您有所帮助,以进一步了解 segue 以及如何执行和准备它们等: https://youtu.be/DxCydBmOqXU

    【讨论】:

    • 我在继承 UIViewController 时还能覆盖 tableView didSelectRowAt 函数吗?我什么时候可以覆盖它?
    • 如果你继承自一个普通的 UIViewController 那么你不能重写这个函数,因为没有必要。而是让类符合 UITableViewDelegate 和 UITableViewDataSource
    • 好的,我试试看。
    • 要做到这一点: ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource “:”之后的第一项(对不起,我不确定它的正确名称是什么)是类从以下继承的items 是类确认的内容 注意:UITableViewDelegate - 处理诸如触摸事件等 UITableViewDataSource - 管理用于填充表格视图的数据
    • 我尝试覆盖 didSelectRowAt,但 xcode 说 Method 不会覆盖其超类中的任何方法。我继承了你提到的协议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多