Swift indexPathForSelectedRow 从子视图返回 nil

Posted

技术标签:

【中文标题】Swift indexPathForSelectedRow 从子视图返回 nil【英文标题】:Swift indexPathForSelectedRow returns nil from subview 【发布时间】:2018-03-25 23:27:28 【问题描述】:

我有一个带有表格的子视图,并且我可以很好地填充数据。我有来自 superview 的“prepare(for segue:”)识别单元格的选择就好了。但是,从 super 中的 prepare 函数,indexPathForSelectedRow 返回 nil。即使我选择了单元格。

self.crossRefTVC.tableView.indexPathForSelectedRow //returns nil

其他一切正常,包括从主超级视图填充 crossRefTVC.tableview 数据。

添加此详细信息:

class MyText: UIViewController, UIGestureRecognizerDelegate, UIPickerViewDelegate, UIPickerViewDataSource 

    @IBOutlet var crossRefTable: UITableView!
    var crossRefTVC = CrossRefTVC()

    override func viewDidLoad() 
        super.viewDidLoad()

        crossRefTable.delegate = crossRefTVC
        crossRefTable.dataSource = crossRefTVC
    

    @objc func myMethodToHandleTap(_ sender: UITapGestureRecognizer) 
            crossRefTVC.results.append(data)
            crossRefView.center = view.center
            view.addSubview(crossRefView)
    
...
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

        if segue.identifier == "CRShowDetail" 
            print(self.crossRefTVC.tableView)
            print(self.crossRefTVC.tableView.indexPathForSelectedRow as Any)

        
    

class CrossRefTVC : UITableViewController 

      override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
      //other table overrided funcs here, all work.

就像我说的,prepare 代码正确执行,它可以访问 crossRefTVC 中的变量,但由于某种原因它看不到所选单元格。

您可以在此处查看此子视图的情节提要:

【问题讨论】:

你能用更好的方式说明结构吗? 我添加了更多代码作为我正在做的示例 看来self.crossRefTVC 可能指的是您的CrossRefTVC 类的不同实例 - 您如何显示包含的CrossRefTVC 实例? 我刚刚添加了 myMethodToHandleTap 函数。这就是我添加子视图的方式。我没有创建任何其他 crossRefTVC 实例 但是crossRefViewcrossRefTVC 有什么关系? 【参考方案1】:

我删除了 crossRefTVC 并将 UITableViewDataSource、UITableViewDelegate 添加到 MyText 类,并将其用于所有与表相关的代码。这解决了这个问题。虽然我真的不想在这个主类中拥有所有代码,但至少它现在可以工作了。谢谢

【讨论】:

以上是关于Swift indexPathForSelectedRow 从子视图返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

swift 示例BS swift.swift

swift swift_bug.swift

ios 整理(一)swift和oc的区别

swift swift_extension5.swift

swift swift_optional4.swift