2017-07-01 17 views
0

私はあるテーブルビューから別のビューにセグを実行しています。segueの後にviewDidLoad()が実行されない

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

それは(私はストーリーボードに宣言した)のViewController

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() 
     } 

    }) 


} 

のカスタムクラスでこれが起こっされる可能性がありますなぜ任意のアイデアを説明した新しいテーブルビューのviewDidLoad()を実行する必要がありますか?

+0

する必要がありますはパラメータ –

+0

親パラメータはsegues送信者ではありませんしました'sender:productList [indexPath.row]' –

+1

実際には、あなた自身のためにパラメータを使ってviewDidLoadという名前の関数を作成していて、どこにも呼び出さなかったので、動作しなかったと思います。 @sulthanが指摘したように、UIViewControllerのviewDidLoad()関数をオーバーライドしましょう。 2つのViewController間でデータを渡す必要がある場合は、 "prepareForSegue"を介してデータを渡す方法を学びます。 –

答えて

1
目的地コントローラ へ

埋め込みナビゲーションコントローラと種類識別子とそれに現在のテーブルビューセルからセグエを作成します。 は、その後、あなたの の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を宣言することを確認しますそれ。

1

viewDidLoadにはパラメータはありませんし、override句必要があります。

override func viewDidLoad() { 
    ... 
} 
+0

オーバーライドを追加するとエラーが発生します**メソッドはそのスーパークラスのメソッドをオーバーライドしません** –

+0

@ThomasKearsleyつまり、メソッドをUIViewControllerに入れないということです。 – Sulthan

+0

私はパラメータを削除するときにのみオーバーライドすることができます。 –

-1

あなたはtableviewcellと同じクラスを使用していますか?はいの場合は、両方のテーブルビューに対して異なる識別子[RESUE IDENTIFIER]を保持します。

0

あなたのメソッドのシグネチャは

func viewDidLoad(parent: String) { 

ですが、それはのUIViewControllerののviewDidLoad()関数はある?「親」のパラメータで何

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Your code 
    } 
関連する問題