viewDidLoad()在segue之后没有运行

时间:2017-07-01 06:16:49

标签: ios swift

我正在从一个表视图到另一个表视图执行segue。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    NSLog("You selected cell number: \(indexPath.row)!")
    self.performSegue(withIdentifier: "types", sender: productList[indexPath.row])
}

它应该运行ViewController的自定义类(我已在Storyboard中声明)所描述的新TableView的viewDidLoad()

func viewDidLoad(parent: String) {
    print("This should print")
    super.viewDidLoad()
    //self.typeTableView.delegate = self
    //self.typeTableView.dataSource = self

    //Set reference
    ref = Database.database().reference()
    //Retrieve posts
    handle = ref?.child(parent).observe(.childAdded, with: { (snapshot) in
        let product = snapshot.key as? String
        if let actualProduct = product
        {
            self.productList.append(actualProduct)
            self.typeTableView.reloadData()
        }

    })


}

任何想法为什么会发生这种情况?

4 个答案:

答案 0 :(得分:1)

override没有参数,需要override func viewDidLoad() { ... } 子句:

{{1}}

答案 1 :(得分:1)

将导航控制器嵌入目标控制器  并使用标识符 types 从当前表格视图单元格中创建一个segue。 然后在你的后面添加以下方法       func tableView(_ tableView:UITableView,didSelectRowAt indexPath:IndexPath){}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "types" {
        if let indexPath = tableView.indexPathForSelectedRow {
            let object = productList[indexPath.row] as! yourProductType
            let controller = (segue.destination as! UINavigationController).topViewController as! YourDestinationViewController
            controller.yourProductProperty = object
        }
    }
}

确保在目标控制器中声明yourProductProperty,以便可以访问其中的当前产品对象。

答案 2 :(得分:0)

您的方法签名是

func viewDidLoad(parent: String) {

但它应该是

override func viewDidLoad() {
        super.viewDidLoad()
        // Your code
    }

答案 3 :(得分:-1)

你正在使用同一个类到tableviewcell吗?如果是,则为两个tableview保留不同的标识符 [RESUE IDENTIFIER]