2011-03-23 5 views
0

これは多分簡単なことですが、まだこれについてのイン・アンド・アウトを学んでいますが、私は利用可能な答えでこの1つの検索を使い果たしました。presentModalViewController UIViewController内のUITableViewからの親の

私はいくつかの要素が表示されたUIViewControllerを持っています。そのような要素の1つはUITableViewです。 UITableViewは、それ自身のクラスを持っており、テーブルビューに関しては正常に動作しているviewWillAppear

- (void)viewWillAppear:(BOOL)animated 
{ 
    UITableView *insideTableView = [[UITableView alloc] init]; 
    tableView.delegate = insideTableView; 
    tableView.dataSource = insideTableView; 
} 

すべてUIViewControllersに割り当てられています。今日、いくつかの追加を試しています。そのうちの1つは、そのテーブルビュー内のセル選択に関する新しいビューポップアップです。

私のtableViewクラス内で、私は次のようしている:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"Cell Pressed, Present View"); 
    PopupView *popupView = [[PopupView alloc] initWithNibName:@"PopupView" bundle:nil]; 
    popupView.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [self presentModalViewController:popupView animated:YES]; 
} 

は、今では細かい呼び出される、のNSLogによって検証、しかしビューが表示されません。私は、問題が、PopUpをTableViews Parentの上に表示する必要があるという事実に関連していることを知っています。

このインスタンスで正しく呼び出す方法がわかりません。

+0

popupViewがnilでないことを確認しましたか? – freespace

+0

はい、私はブレークポイントでこれを確認しただけでなく、上のコードを親ビューにコピーし、新しいビューがロードされたことを確認するためのボタンを作成しました。親から呼び出されたときに正常に動作します。この問題は、TableViewが親ではないという事実に関連しています。そして、 'self.parentViewController'を呼び出すことは、このインスタンスのためにも動作しません。 –

+0

セットアップを理解しているかどうかを見てみましょう: 'UITableView'がデリゲートを持っている' UIViewController'を持っています(デリゲートのクラスは何ですか? – freespace

答えて

1

代理人はUIViewControllerで、viewプロパティセットを持たないため、presentModalViewController::は機能しません。

モーダルビューコントローラを表示するには、テーブルビューを含むビューコントローラが必要ですが、そのビューコントローラはではなく、テーブルビューデリゲートの親です。これは、View Controller階層がないためです。

これを修正する最も簡単な方法は、ビューがテーブルビューを含むビューコントローラ内にこれらのメソッドを配置することです。また、テーブルビューのデリゲートはビューコントローラへの参照を保持する必要があり、ビューコントローラはpresentModalViewController::を呼び出すことができます。

後者のアプローチでは保持サイクルが発生する可能性があるため、保持していない参照を使用する必要があります。最も良い実装はdelegate patternです。

また、viewWillAppear:でインスタンス化を行いたくないのは、ビューコントローラのライフサイクル中に複数回呼び出すことができるためです。コードをviewDidLoadに入れ、それをdeallocに入れてください。モーダルビューコントローラが動作しているときは、モーダルビューコントローラが表示されたり閉じたりするたびに、ビューが表示されるたびにメモリがリークしています。

関連する問題