78

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

ここまでで、ファイル リスト ビュー コントローラーからファイル詳細ビュー コントローラーへのセグエと、ファイル リスト テーブル ビュー セルからファイル リスト テーブル ビュー コントローラーへのセグエを作成しました。

ここに画像の説明を入力

これに関する問題は、ユーザーがセルをタップするとすぐにセグエが実行されることです。テーブルビューセルからセグエを削除し、ファイルリストビューコントローラーからそれ自体にセグエを作成したいと思います。そうすれば、ユーザーがセルをタップしたときに、プログラムで正しいセグエをトリガーできます。

だから、私の質問は次のとおりです。View ControllerからInterface Builderでそれ自体へのセグエを作成することは可能ですか?

4

9 に答える 9

43

ナビゲーション コントローラーを使用している場合は、ViewController をナビゲーション スタックにプッシュする必要があります。この例では、ストーリーボード 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];
于 2013-04-15T21:12:50.193 に答える
31

Xcode 5 を使用すると、はるかに簡単な解決策があります。

  1. ストーリーボードで表のセルをクリックします
  2. Connections Inspector (右上の右矢印アイコン) を開きます。
  3. 「トリガーされたセグエ」の下に「選択」が表示されます
  4. 「選択」の横にある円からストーリーボードのセルにドラッグします

それでおしまい。

于 2014-05-02T20:16:55.610 に答える
24

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

于 2012-07-29T04:33:50.213 に答える
22

Interface Builder のアプローチ: 提示元のビュー コントローラーを参照するストーリーボード参照にセグエするだけです。

于 2017-07-26T14:29:20.123 に答える
12

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

- (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);
}
于 2013-04-27T03:17:57.587 に答える
4

セグエを定義したり、独自の識別子をハードコーディングしたりせずに、現在のView Controllerの別のインスタンスをプッシュする方法は次のとおりです。

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

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

復元 ID

于 2016-07-19T09:23:37.307 に答える
0

お役に立てれば。

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

(ストーリーボード内の)すべてのセルを別のビューにリンクできます。

このようなもの:

NSString *CellIdentifier = @"Cell"; 
if (Condition2 ){
CellIdentifier = @"Cell2"; } 
if (Condition3 ){
CellIdentifier = @"Cell3"; }
于 2013-09-28T12:55:36.083 に答える