こんにちは、ストーリーボードがあり、表のセルをクリックすると詳細ビューを表示できます。クリックするセルに応じて異なるビューコントローラーを表示するように、追加の機能を追加したい。同じセルから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つのセグエを作成することができないためです。また、セグエの両方をコントローラーから各宛先にドラッグしようとしましたが、セルから1つとコントローラーから1つではなく、運がありませんか?
この場合、セグエをtableviewcellに接続しようとしないでください。それらをView Controller自体に接続します。
TableCellから他のView Controllerに複数のセグエを作成しようとしないでください。ストーリーボードインターフェイスのView Controllerの下にあるView Controllerアイコンから、セグエしたいViewControllerにCtrlキーを押しながらドラッグします。その後、複数のセグエを設定できます。
そして、セグエを実際に機能させるには、セグエ自体に識別子を追加する必要があります。これは、セグエをクリックしてプロパティインスペクターで名前を付けることで実行できます。
次に、TableCellsの例では、UITableViewDelegateで、
-tableView:didSelectRowAtIndexPath:
使用できます
- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender
選択するセグエの独自のロジックに応じて、手動でセグエを開始します。
デモプロジェクトのサンプルコードを次に示します。
- (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をリンクしてセグエを作成することです。
In 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)
}