10

私は今、iOS5 の 4.2 で Xcode を使い始めています。いくつかの変更があり、解決方法がわからないという問題に直面しています。

私は、2 つのセクション、1 行のみの 1 番目のセクション、および 3 行の 2 番目のセクションでプログラムによって設定される UITablwView の例を実行しています。

私の目的は、テーブルから行を選択することです。その行に基づいて、ユーザーは別のビューにリダイレクトされます。

例: セクション 0 行 0 を選択し、アプリがビュー 1 にプッシュ - 名前設定 // セクション 1 行 0 を選択、アプリがビュー 3 にプッシュ - アドレス設定

昔ながらの方法で、これは非常に単純で、UIViewController を initWithNibName で初期化し、ビューをプッシュするだけです。

ストーリーボードを使用すると、すべてが変更されます。または、少なくとも、tableView から異なる UIViewControllers に複数のセグエを設定できないため、同じ結果を得る方法がわからないため、変更されると思います...そして昔ながらの方法を実行するストーリーボードのビューから NIB 名を取得して UIViewController を初期化してプッシュできる場所がわかりません。

この結果に到達する方法を知っている人はいますか??

4

3 に答える 3

25

ソースView Controllerからのストーリーボードで、各宛先View Controllerに1つずつ、2つの「汎用」セグエ(たとえば、「segue1」と「segue2」として識別される)を定義します。これらのセグエは、どのアクションにも関連付けられません。

次に、条件付きでセグエを実行しますUITableViewDelegate:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Conditionally perform segues, here is an example:
    if (indexPath.row == 0)
    {
        [self performSegueWithIdentifier:@"segue1" sender:self];
    }
    else
    {
        [self performSegueWithIdentifier:@"segue2" sender:self];
    }
}
于 2012-01-15T07:02:06.477 に答える
16

私はあなたと同じ問題を抱えています。問題は、 tableViewCellを複数のビュー コントローラーにリンクできないことです。ただし、ソース ビュー自体を複数のビュー コントローラーにリンクすることはできます。

  1. シーン ビューアーからマスター ビュー コントローラー(テーブル ビュー セルではなく) を、リンクしたいビュー コントローラーにControl キーを押しながらドラッグします。これは好きなだけ行うことができます。ソース ビュー コントローラー シーンに表示されるセグエは、「NavCell からセグエをプッシュして ...」ではなく、「ルート ビュー コントローラーからセグエをプッシュして...」のようにする必要があることに注意してください。

  2. 「toDetailView1」のような一意の名前で各セグエ リンクを識別します

  3. 最後に、ソース ビュー コントローラーで選択内容をカスタマイズします。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.row % 2 == 1) {
            [self performSegueWithIdentifier:@"toDetailView1" sender:self];
        } else {
            [self performSegueWithIdentifier:@"toDetailView2" sender:self];
        }
    }
    
于 2012-05-30T03:21:32.903 に答える
0

@陳仁乾と@Marcoが説明したように、完全に正しかった。すべてを少し簡単にするために、 のNSArrayときに初期化されるシングルを使用することをお勧めしますviewDidLoad。セグエにあなたと同じ名前を付けるだけです。このようにして、選択できるUIViewControllersものの正しい説明を表示でき、これから実行することもできます:UIViewControllersseguesNSArray

UIViewController(実際、呼び出したいものと同じセグエを呼び出すと問題が発生するかどうかはわかりません。これがBadPractiseであるかどうかを教えてください)

viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    _arraySessions = [[NSArray alloc] initWithObjects:
                      @"MyViewControllerName", nil];
}

cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = 
     [tableView dequeueReusableCellWithIdentifier:@"overviewCell"
                                     forIndexPath:indexPath];

    [cell.textLabel setText:_arraySessions[indexPath.row]];

    return cell;
}

didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self performSegueWithIdentifier:_arraySessions[indexPath.row] 
                              sender:self];
}
于 2014-07-25T11:04:44.580 に答える