2016-08-04 10 views
0

私はテーブルビューを持っています。行の1つがタップされたときに別のVCに行きたいです。私のdidSelectRowAtIndexPath関数は以下の通りです。 printコマンドが機能し、右クリックされた行が表示されます。しかし、私はself.navigationController?.pushViewControllerを使用すると、playVideo storyBoardIdでvcに移動しません。それをpresentViewControllerに変更した後で動作します。プッシュが機能しないという私のコードについて何が間違っていますか?pushViewControllerは何もしません。

おかげ

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    print("clicked " + String(indexPath.row)) 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewControllerWithIdentifier("playVideo") as! PlayVideoViewController 

    vc.id = self.video[indexPath.row].id 

    // Present View as Modal 
    //presentViewController(vc as UIViewController, animated: true, completion: nil) 
    // Push View 
    //self.navigationController?.pushViewController(vc, animated: true) 
} 
+1

PlayVideoViewControllerはナビゲーションコントローラのルートではないため、pushViewControllerメソッドは実行されません。あなたのストーリーボードに行くことによってナビゲーションコントローラを追加する必要があります、PlayVideoViewControllerを選択し、トップメニューでエディタ - >埋め込み - >ナビゲーションコントローラを選択します。あなたのPlayVideoViewControllerはナビゲーションコントローラのルートになり、pushViewControllerは正常に動作するはずです。 – muazhud

+0

@muazhud私はあなたと同じことをした、とBseabornは言った。それでもまだ動作していません –

答えて

3
  • あなたが現在いるビューコントローラにナビゲーションコントローラがない可能性があるためです。
  • UINavigationControllerを持たないView Controllerをプッシュすることはできません。
  • ビューコントローラをプッシュする必要がある場合は、次の手順を実行します。

    1. 埋め込み現在のビューコントローラのナビゲーションコントローラ。(オープンストーリーボード - >あなたのビューコントローラを選択してください - > "エディタ" を選択してください - > "に埋め込む" - > UINavigationController)
    2. 今、あなたのコード

    self.navigationController .pushViewController(VC、アニメーション:真)?

が正常に動作します。

+0

私はそれが目的地にnavコントローラを必要と思った。大ミス!あなたの明確な答えをありがとう –

+0

あなたは歓迎です:-) – Bharath

+0

@バース、これをプログラム的にするには? – Shyam

1

はあなたのViewControllerが実際にNavigationController上に構築されていることを確認します。

self.navigationController!.pushViewController 

これがクラッシュすると、ナビが設定されていないことがわかります。ストーリーボードをチェックインするだけでもいいですが、これは簡単な方法です。

+0

クラッシュしました。オプション値をアンラッピングしている間に予期せずnilが見つかりました。それはナビゲーションコントローラを持っています。私はなぜそれが無しと言うのかわからない –

+1

私はあなたの設定が正確ではない。しかし、ストーリーボードからナビゲーションコントローラを削除し、navに埋め込みたいviewControllerをタップします。エディタ - >埋め込み - >ナビゲーションコントローラ – Bseaborn

+0

はあなたの言ったことと同じでした。しかしまだそれは動作していない –

0

なぜこのようにしているのかわかりません。私はそれが不必要に複雑だと思う。

これはあなたの関数のdidSelectRowAtIndexPathによって必要があります:あなたは、この機能で好きな

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.performSegueWithIdentifier("playVideo", sender: tableView) 
} 

次に、あなたが同じくらいseguesを指定することができます。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier == "playVideo") { 
     let indexPath:NSIndexPath = tableView.indexPathForSelectedRow! 
     let PlayVideoViewController = segue.destinationViewController as! PlayVideoViewController 
     //you can pass parameters like project id 
     detailVC.projectID = ids[indexPath.row] 
    } 
} 

あなたのセグエは、インターフェイスビルダーでは、このような名前する必要があります:

named segue

+0

私はsegueに精通しているが、私の場合は、プッシュを使用してより良いオプションです;) –

関連する問題