uitableviewcontrollerのsegueはプッシュとして機能しません。モーダルとしてのみ機能します
-
26-10-2019 - |
質問
私はこのビュースタックを持っています:
UIViewController --> (Modal segue) -->
UITabBarController --> (relationship) -->
UINavigationController --> (relationship) -->
UITableViewController --> (segue) --> UIViewController
これがuitableviewcontrollerの私のセグエコードです:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"selected row...");
[self performSegueWithIdentifier:@"showVmail" sender:self];
NSLog(@"done segue");
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showVmail"]) {
NSLog(@"Got segue request...");
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
[segue.destinationViewController setMyVmail: [self.vmails objectAtIndex:indexPath.row]];
}
}
テーブルビューコントローラーのアイテムをクリックすると、これらのログメッセージが表示されます。
selected row...
Got segue request...
Setting myVmail... // from the new view controller
done segue
そして、それは私の新しいビューコントローラーに移動しません。モーダルに変更した場合は、機能しますが、もちろんバックボタンはありません。私が見る限り、私はすべてを正しく行いました。私は同じ問題でスタックオーバーフローに関する多くの応答を読み、それらの解決はuinavigationcontrollerに入れることです。 iveはすでにこれを行っています。
どんな考えも大歓迎です!
解決
私はあなたが簡単なケースに戻るべきであることを他に見た提案を試しました。ストーリーボードのuinavigationcontrollerを変更して、基本的なuiviewcontrollerを指してから、別のuiviewcontrollerに囲まれたボタンを作成しました。私がそれを実行したとき、私はまだ私のuitableviewcontrollerを手に入れました!
それは、私がuitabbarcontrollerのオブジェクトをプログラム的に記入していること、そしてuinavigationcontrollerを呼び出したのではなく、それをスキップしてuitableviewcontrollerを呼び出していることを思い出したときです。実際、私は本当に他のすべての人と同じ問題を抱えていましたが、UinavigationControllerがありませんでした!
私のプログラムを変更して、uitableviewcontrollerの代わりにuinavigationcontrollerをリンクし、すべてが予想どおりに機能しています。