2012-02-23 9 views
4

私は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は決して呼び出されません。

これはおそらく小さなものですが、わかりません...アドバイスはありますか?

編集:ここではセグエを示すストーリーボードとコントローラのスクリーンショットは、次のとおりです。

enter image description here

+1

セルからディテール・コントローラーにプッシュ・セグを定義している場合は、didSelectRow ...メソッドですべてのものを必要としません。あなたはそのようなセグを持っていますか? – jrturton

+0

@jrturtonはい、私のストーリーボードから、「SpeakerCellからSpeaker Detail View Controllerへのプッシュセグ」があります。speakerCellはUITableViewCell(私のダイナミックテーブルのプロトタイプ)の識別子で、Speaker Detail View Controllerはサブクラス化したView Controllerです。 Segueへの準備のためにDetailと呼ばれるSegueに識別子を追加しました。 – knaak

+0

両方のビューコントローラがストーリーボードのナビゲーションコントローラに組み込まれていますか? – jrturton

答えて

6

プッシュが機能するためにseguesあなたはナビゲーションコントローラにビューコントローラを埋め込む必要があります。私はなぜそれがあなたの場所にこれなしでそれらを定義することができますか分からない。

これを行うには、テーブルビューコントローラをクリックしてから、エディタ - >埋め込み先 - >ナビゲーションコントローラを選択します。タブ・コントローラーの中にいなければならない場合は、ナビゲーション・コントローラーも同様の方法で組み込みます。あなたは次のように表示されます

enter image description here

あなたのセグエが今動作します。

+0

ありがとうございます。私はタブバーコントローラはナビゲーションコントローラの一種だと思ったので、私は自分のUITableViewControllerを1つに組み込む必要はありませんでした。すべてがセグーを除いて動作するように見えたので、私はそれに集中しました。再度、感謝します! – knaak

+0

私は時間の束を保存していただきありがとうございます。 – Das

関連する問題