0

わかりました、UITableViewController があります。その中に動的なテーブルビューセルが定義されています。ここでは簡単にするために、3 つの動的行が定義されているとします。スクリーンショットを見る

ここに画像の説明を入力

だから私がやりたいのは、ユーザーが触れたときです

  • 行 1、viewcontroller1 に移動したい
  • 行 2、viewcontroller2 に移動したい
  • 行 3、viewcontroller3 に移動したい

ここでジレンマの部分があります。プロトタイプセルを選択し、モーダルを使用してそれをviewcontroller1に接続すると、それ以降、触れる行は常にviewcontroller1に移動します。UITableViewController 用にこのコードを書こうと思ったのですが、複数のセージを作成する方法がわかりません。(下記参照)

これはストーリーボードと UITableView の制限であり、動的セルを使用して行うことはできません。私がしなければならないことは、静的セルを作成し、各行を対応するビュー コントローラーに手動で接続することです。50行を取得し、各行を新しいView Controllerに接続する必要があるため、より簡単な方法があるかどうかを知りたかっただけです。はい、絵コンテでものをつなぐのが大好きです。より良いアプローチがあれば、セカンドオピニオンを得たかっただけです。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Navigation logic may go here. Create and push another view controller.

        //SECTION #0
        if (indexPath.section == 0)
        {
            [self performSegueWithIdentifier:@"goto1" sender:nil];

        }

    //SECTION #1
        if (indexPath.section == 1)
        {
            [self performSegueWithIdentifier:@"goto2" sender:nil];

        }

    //SECTION #2
        if (indexPath.section == 2)
        {
            [self performSegueWithIdentifier:@"goto3" sender:nil];

        }

}
4

2 に答える 2

2

コントローラー ツールバーの黄色のコントローラー アイコンからセグエをドラッグすることもできます。テーブル ビュー コントローラーを選択すると、下図のような黒いツールバーが表示されます。

コントローラ ツールバー

黄色のアイコンから目的の宛先コントローラーにドラッグします。

このようにして、セグエはセルやその他のものに直接接続されません。識別子を与えると、いつでもコードで実行できます。

あなたの場合、適切と思われるロジックperformSegueWithIdentifier:sender:tableView:didSelectRowAtIndexPath:基づいて呼び出します。

[編集]:

「より良いアプローチがあれば、セカンドオピニオンを得たかっただけです。」

50 の異なるセグエと目的地は、非常に多くのようです。単一 (または少なくとも 50 個未満) のビュー コントローラーを再利用できないと確信していますか (コンテンツのみが異なる場合など)。たとえば、コンテンツを含む 50 の類似ページを表示するとします。ストーリーボードに 50 個のビュー コントローラーを作成する代わりに、1 つ作成し、表示する前にビュー コントローラーのコンテンツを設定します。

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    MyPageController *page = (MyPageController *)segue.destinationViewController;
    // get content for selected row
    page.content = myContentModelObject;
}
于 2013-01-18T16:27:00.137 に答える
0

セグエは、ストーリーボードで線をドラッグすることによってのみ作成できます。それらが作成されたら、それらをカスタマイズできますが、そもそもそれらすべてを描画する必要がある場合、それはあまり役に立ちません.

これらすべての行の描画 (およびデバッグ...) を節約するために、ストーリーボードを使用せずにセグエの作業を簡単に行うことができます。モーダル セグエの場合:

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* identifier = [NSString stringWithFormat:@"%d",indexPath.row];
    RWViewController* detailView = [self.storyboard instantiateViewControllerWithIdentifier:identifier];
    [self presentViewController:detailView animated:YES completion:nil];
}

ストーリーボードで 50 個の ViewController を引き続き作成できます。それぞれに、対応する indexpath.row に一致する数値識別子を与えます

線が引けない…

ストーリーボードが 50 個の viewController で圧倒される場合は、それぞれに個別の xib を使用することを検討してください (または、いくつかの異なるストーリーボードを分割して、それらをグループに配置することもできます)。

于 2013-01-18T16:38:50.430 に答える