2012-02-10 5 views
67

ファイル/フォルダーリストをドリルダウンする仕組みを作ろうとしています。アイデアは、ユーザーがフォルダを選択するたびに同じファイルリストビューコントローラを表示し、ファイルを選択するとファイル詳細ビューコントローラを表示することです。ストーリーボードビューアーからビューコントローラーへ

これまでのところ、私はファイルの詳細ビューコントローラへのファイルリストビューコントローラ、およびファイルリストテーブルビューコントローラへのファイルリストテーブルビューセルからセグエからセグエを作成しました:

enter image description here

この問題は、ユーザーがセルをタップすると直ちにセグが実行されることです。私は、テーブルビューのセルからsegueを削除し、ファイルリストビューコントローラからそれ自身を作成し​​たいと思います。こうすることで、ユーザーがセルをタップしたときにプログラムによって正しいセグをトリガーすることができました。

私の質問は次のとおりです。View ControllerからSegueをInterface Builderで作成することは可能ですか?

+1

はい、xcode 5を使用することができます。 [投稿を参照](http://stackoverflow.com/questions/9226983/storyboard-segue-from-view-controller-to-itself/23436265#23436265)。 –

+0

エディタメニューを開き、 'Show Document Outline'をクリックし、セルからアウトラインのFile List'ViewController'オブジェクトに右ボタンでドラッグします。 –

答えて

25

ファントムボタンを使用してセグを作成する方法を開発しました。私はそれがあなたの問題を解決すると信じています。あなたは私の答えhereでそれについて読むことができます。

+4

これは私を正しい軌道に乗せる。私は "Dock"にボタンを追加し、それをファイルリストビューコントローラに接続しました。今度は、私が望むようにセグをプログラムで実行することができます。ありがとう! – Jorge

+1

私はこれがセルフセグを得るために必要ではなかったと思うが、これはうまくいく。 – jogloran

+2

ムスタファのソリューションは、ハッキーではなく、かなり簡単です。ファントムボタンで同じビューにセグを作ると、ストーリーボードが混乱するだけです。 – strada

23

同じコントローラにセグを実行する代わりに、ストーリーボードからビューコントローラ(同じもの)をインスタンス化し、ナビゲーションコントローラにプッシュすることができます。

+0

私はファントムボタンソリューションが好きです。フォワードトランジションはprepareForSegueを経由する方が良い:IBまたはコードでトランジションが作成されているかどうかを覚えておくのではなく、 –

40

ナビゲーションコントローラを使用している場合は、ViewControllerをnavスタックにプッシュする必要があります。この例では、ストーリーボードID設定でViewController "VDI"という名前を付けました。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"]; 
[self.navigationController pushViewController:dest animated:YES]; 

あなたはNavigationControllerは、あなたがそうのようにそれに追加する前にスタックをポップすることができますあなたの「戻る」歴史に自分自身を追加し続けるしたくない場合。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"]; 
UINavigationController *navController = self.navigationController; 
[navController popViewControllerAnimated:NO]; 
[navController pushViewController:dest animated:YES]; 
+0

これと@ TJ/@ Jorgeメソッドの両方が動作します。私はこの方法のために清潔に感じたので行った。 私が他の方法で見ることができる利点は、あなたがストーリーボードであなたのループセグを見ることができ、 "prepareForSegue:"内のすべてのナビゲーションを扱うことができることです。 – siburb

+1

完璧に機能しました!また、これはXcodeの「Storyboard ID」で、これを再作成しようとする人にとっては「VDI」に設定されています。 – Nerrolken

13

IOS 6では、ファントムボタンを使用するよりもa cleaner solutionがあります。あなたはまだ、自動的にトリガセグエをキャンセルする表のセルからのビューコントローラへのセグエを定義し、送信者を見ることができます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    //storyboards should use segues and override prepareForSegue instead 
    //but here we need custom logic to determine which segue to use 
    id item = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    if (item meets condition) { 
     [self performSegueWithIdentifier:@"segue1" sender:self]; 
    } else { 
     [self performSegueWithIdentifier:@"segue2" sender:self]; 
    } 
} 

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    //ignore segue from cell since we we are calling manually in didSelectRowAtIndexPath 
    return (sender == self); 
} 
0

・ホープ、このことができます。

複数のプロトタイプセルを作成できることがわかりました。

ストーリーボード内のすべてのセルを別のビューにリンクすることができます。このような

何か:

NSString *CellIdentifier = @"Cell"; 
if (Condition2){ 
CellIdentifier = @"Cell2"; } 
if (Condition3){ 
CellIdentifier = @"Cell3"; } 
27

くらい簡単な解決策があるXcodeの5を使用しました。

  1. 次のストーリーボードで円から
  2. オープン接続インスペクタ(右上にある右矢印アイコン)
  3. あなたが「選択」を参照してください。「seguesをトリガー」の下にドラッグし、テーブルセルをクリックしますストーリーボードのセルに「選択」することができます。

これはそれです。ここで

+2

このアプローチは、コード行なしの魅力のように機能します。 –

+2

これはxcode 5+の正解です。最近では、 "ショー"セグを使用する必要があります。 – CupawnTae

+2

私のために動作していないようですが、View ControllerはSegueを追加できるように "青"になりません。 – db0

3

あなたがセグエを定義したり、独自の識別子をハードコーディングすることなく、現在のビューコントローラの別のインスタンスをプッシュすることができます方法は次のとおりです。

SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restorationIdentifier]; 
[self.navigationController pushViewController: same animated: YES]; 

はあなただけあります(ストーリーボードIDと同じになるように復元IDを設定する必要がありますIBのチェックボックス)。

Restoration ID

4

インタフェースビルダーアプローチ:ちょうどバック提示ビュー・コントローラを指すストーリーボード参照にセグエ。

+1

このアプローチは、IBでセグを使って他のナビゲーションを行うのが一番いいです!ありがとう! –

0

正しい答えは、自分自身にセグをしてから、それを指すようにしたいUIViewControllerを参照しているStoryboard Referenceを使用することです。

enter image description here

関連する問題