質問

こんにちは私はストーリーボードを持っていて、テーブルセルをクリックするときに詳細ビューを表示することができます。クリックするセルに応じて、別のビューコントローラーを表示するように、追加の機能を追加したいと思います。同じセルから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番目のビューは決して表示されません。これは、単一のテーブルセルから2人のセグラを持つことができないためです。また、セルからのセグエをセルからのものとコントローラーからのものではなく、各宛先にドラッグしようとしましたが、運はありませんか?

役に立ちましたか?

解決

この場合、SeguesをTableViewcellに接続しようとしないでください。それらをビューコントローラー自体に接続します。

他のヒント

テーブルチェルから他のビューコントローラーまで複数のセグラを作成しようとしないでください。ストーリーボードインターフェースのビューコントローラーの下のビューコントローラーアイコンからCTRL+ドラッグを作成し、SEGUEを表示するViewControllerにドラッグする必要があります。その後、複数のセグラをセットアップできます。

screenshot showing multiple segues

そして、実際にセグラを動作させるには、識別子をセーグ自身に追加する必要があります。それをクリックして、プロパティインスペクターに名前を付けることができます。

giving segue an identifier

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

-tableView:didSelectRowAtIndexPath: 

使用できます

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

Segueを選択すべきものの独自の論理に応じて、手動でセグエを開始する。

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

-         (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 ビューコントローラーのプロパティであり、どのセグエを実行すべきかを決定します。

上記の答えが言ったように、重要なのは、2つのビューコントローラーをリンクすることにより、Segueを作成することです。

Swift 3.1で、2つの状態のセグメント制御があります

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var segue: String!
if selectedSegment == 0 {
    segue = "segue1"
} else  {
    segue = "segue2"
}
self.performSegue(withIdentifier: segue, sender: self)

}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top