代码之家  ›  专栏  ›  技术社区  ›  wonza

Swift indexPathForSelectedRow从子视图返回nil

  •  0
  • wonza  · 技术社区  · 6 年前

    我有一个子视图和一个表,我正在填充数据。我在superview中有“prepare(for segue)”,可以很好地识别单元格的选择。然而,在super中的prepare函数中,indexPathForSelectedRow返回零。即使我选择了单元格。

    self.crossRefTVC.tableView.indexPathForSelectedRow //returns nil
    

    其他一切都很好,包括填充crossRefTVC。主superview中的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中的变量,但由于某种原因,它看不到所选的单元格。

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

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   wonza    6 年前

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