49

こんにちは、ストーリーボードがあり、テーブル セルをクリックすると詳細ビューを表示できます。クリックしたセルに応じて別のView Controllerを表示するように、追加の機能を追加したいと思います。同じセルから 2 つのセグエをドラッグしようとしましたが、許可されません。

私の考えでは、セルからそれぞれ異なるビューを指す 2 つのセグエを作成し、目的のセグエを呼び出します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSInteger row = indexPath.row;
    NSLog(@"Selected Item :-) %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:row]]);
    if(row %2 ==0){
        NSLog(@"Even");        
        [self performSegueWithIdentifier:@"ShowSecondIndex" sender:self];
    }else{
        [self performSegueWithIdentifier:@"ShowSelectedMovie" sender:self];
        NSLog(@"Odd");

    }

} 

次に、prepareForSegue でセグエを処理します

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    NSLog(@"Prepare For Segue ID:%@",[segue identifier]);

    if([[segue identifier] isEqualToString:@"ShowSelectedMovie"]){
        Tab2_ItemViewController *vc = [segue destinationViewController];
        NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
        NSLog(@"Selected Index: %d",selectedIndex);
        [vc setSelectedItem: [NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]];
        NSLog(@"String Value: %@",[NSString stringWithFormat:@"%@",[myData objectAtIndex:selectedIndex]]);
        [vc setSelectedIndex:selectedIndex];


    }else if([[segue identifier] isEqualToString:@"ShowSecondIndex"]){

        NSLog(@"Viewing Second Index");
    }

}

ただし、2 番目のビューは表示されません。これは、1 つのテーブル セルから 2 つのセグエを持つことができないためです。また、セルから 1 つとコントローラーから 1 つではなく、両方のセグエをコントローラーから各宛先にドラッグしようとしましたが、うまくいきませんか?

4

4 に答える 4

69

この場合、セグエを tableviewcell に接続しようとしないでください。それらをView Controller自体に接続します。

于 2012-01-12T16:18:22.433 に答える
47

TableCell から他のビュー コントローラーへの複数のセグエを作成しようとしないでください。ストーリーボード インターフェイスのビュー コントローラーの下にあるビュー コントローラー アイコンから、セグエ先のビュー コントローラーに Ctrl キーを押しながらドラッグします。次に、複数のセグエを設定できるようにします。

複数のセグエを示すスクリーンショット

次に、セグエを実際に機能させるには、セグエ自体に識別子を追加する必要があります。これを行うには、セグエをクリックして、プロパティ インスペクタで名前を付けます。

セグエに識別子を与える

次に、TableCells の例では、UITableViewDelegate で、

-tableView:didSelectRowAtIndexPath: 

あなたが使用することができます

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

セグエを選択する独自のロジックに応じて、セグエを手動で開始します。

于 2012-07-25T04:50:52.990 に答える
4

これが私のデモ プロジェクトのサンプル コードです。

-         (void)tableView:(UITableView *)tableView
  didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *segueName = nil;

    if (type == kCore) {
        segueName = @"segue1";
    } else if (type == kStdlib) {
        segueName = @"segue2";
    }

    [self performSegueWithIdentifier: segueName sender: self];
}

typeどのセグエを実行するかを決定するView Controllerのプロパティです。

上記の答えが言ったように、キーは2つのView Controllerをリンクしてセグエを作成することです。

于 2013-09-13T00:12:02.090 に答える