私はiOSを学んでおり、iOS 5を使って簡単なiPhoneアプリケーションを作成しました。アプリケーションは、その名前のいずれかを選択すると、その人(名前、住所など)の詳細を表示するので、実際には2つのViewController UITableViewControllerとUIViewController(どちらもサブクラス化)です。 MICSpeakersTableViewController中のSOprepareForSegueを使ってUITableView didSelectRowAtIndexPathを呼び出しましたが、didLoadViewは呼び出されません。
、:私はそれを選択し、(そのないゼロと説明が一致していることに)話を移入するときに呼び出される
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MICSpeakerDetailViewController *detailViewController = [[MICSpeakerDetailViewController alloc] initWithNibName:@"Detail" bundle:nil];
[detailViewController setSpeaker:[[self getSpeakers] objectAtIndex:indexPath.row]];
[self.navigationController pushViewController:detailViewController animated:YES];
}
:のUITableViewControllerは、私はこれを持っています。
は、その後、私は同じ実装でこれを持っている:とも呼ばれます- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSIndexPath *indexPath = [ self.tableView indexPathForCell:sender];
if ([segue.identifier isEqualToString:@"Detail"])
[segue.destinationViewController setSpeaker:[[self getSpeakers] objectAtIndex:indexPath.row]];
}
をしてsegue.identifierが詳細であるとdestinationViewControllerのスピーカーが正しく設定されている(nilでない、説明が一致しました)。私はdidSelectRowAtIndexPathに設定して以来、なぜそれを再度設定しなければならないのかよく分かりませんが、もう一度設定すると無害です。
最後に、MICSpeakerDetailViewControllerでは、initWithNibNameメソッドが呼び出され、self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];インスタンスを返します。
しかし、segueは決して起こらず、viewDidLoadは決して呼び出されません。
これはおそらく小さなものですが、わかりません...アドバイスはありますか?
編集:ここではセグエを示すストーリーボードとコントローラのスクリーンショットは、次のとおりです。
セルからディテール・コントローラーにプッシュ・セグを定義している場合は、didSelectRow ...メソッドですべてのものを必要としません。あなたはそのようなセグを持っていますか? – jrturton
@jrturtonはい、私のストーリーボードから、「SpeakerCellからSpeaker Detail View Controllerへのプッシュセグ」があります。speakerCellはUITableViewCell(私のダイナミックテーブルのプロトタイプ)の識別子で、Speaker Detail View Controllerはサブクラス化したView Controllerです。 Segueへの準備のためにDetailと呼ばれるSegueに識別子を追加しました。 – knaak
両方のビューコントローラがストーリーボードのナビゲーションコントローラに組み込まれていますか? – jrturton