0

私はセルをサブクラス化したテーブルビューを持っています。これらのセルでは、私はUIViewのサブビューを追加します。セルをスライドさせるとき、別のUIViewをUITableViewCellのサブクラスに追加します。UITableViewCellのサブビューからUINavigationControllerを呼び出します。

私は2番目のUIView(UITableViewCellのサブビュー)内のボタンを押すと、ModalViewControllerを提示したいと思います。私はこのビュー内にナビゲーションコントローラを持っていないので、ビューコントローラからのナビゲーションコントローラを渡しています。私のテーブルビューは、2番目のUIViewの内側と下方にあります。

ここでは、いつものように呼びますが、何も起こりません。

ComposeCommentViewController *ccvc = [[ComposeCommentViewController alloc] initWithNibName:@"ComposeCommentViewController" bundle:nil]; 
[navController presentModalViewController:ccvc animated:YES]; 

誰かが私が間違っているか、別の解決策を持っているか考えている人はいますか?

EDIT:は、これは私が私がのUITableViewCellのサブクラス私に渡しまず

navControllerを設定する方法です。

if (feedCell == nil) 
{ 
    feedCell = [[FeedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    [feedCell setNavigationControllerForSlidedView:[self navigationController]]; 
} 

サブクラスはこのようになります方法setNavigationControllerForSlidedView:があります。私のFeedSlidedView

- (void)setNavigationControllerForSlidedView:(UINavigationController *)navController 
{ 
    [feedSlidedView setNavController:navController]; 
} 

を私は(あなたがこのことについてうとしている方法は、MVCに反するUINavigationController *navController;

+0

navControllerのコードは? –

+0

もちろん。元の投稿に追加しました。 – simonbs

答えて

4

を宣言し、合成しましたモデルビューコントローラ)の設計プラクティスです。あなたは、AppleがSDKで提供するMVCフレームワーク内で望むものを達成するためのいくつかの仕組みを持っています。私の意見では、UITableViewCellのサブビューのボタンにターゲットアクションを追加するのが最も簡単な方法でしょう。あなたのビューコントローラのtableView:cellForRowAtIndexPath:方法では、次のようなものを追加します。

[button addTarget:self action:@selector(presentComposeComment:) forControlEvents:UIControlEventTouchUpInside]; 

をこの場合、selfは、当該のUITableViewに責任があるのUIViewControllerだろう。私は、ナビゲーションコントローラにpresentModalViewController:animated:メッセージを送信していないです

- (void)presentComposeComment:(id)sender { 
    ComposeCommentViewController *ccvc = [[ComposeCommentViewController alloc] initWithNibName:@"ComposeCommentViewController" bundle:nil]; 
    [self presentModalViewController:ccvc animated:YES]; 
} 

ノートではなく、ビューコントローラ:あなたは、そのビューコントローラで上記のセレクタのための方法が含まれます。

+0

私のUITableViewCellのサブビューはUIViewのサブクラスであるため、 'presentModalViewController:animated:'に応答しません(私は 'drawRect:'を使用する必要があるため、これをやっています)。あなたの例は間違いなく最良の方法ですが、この場合は不可能です。あなたはUITableViewを担当するUIViewControllerを呼び出す別の方法があるかどうか知っていますか? – simonbs

+0

上記の私の答えを見て、私はpresentComposeComment:メソッドは、UITableViewを担当するUIViewControllerに行くと述べた。 UIViewControllerはボタンのターゲットで、UIViewControllerはpresentComposeComment:コードを配置する場所です。 – glorifiedHacker

+0

さて、私はそれを試みましたが、あなたが何を意味するのか分かりません。私は 'presentComposeComment:'を私のテーブルビューがあるView Controllerに配置しました。私のUITableViewCellでは、私はサブビューのボタンを呼び出し、これにターゲットを追加しました: '[[feedSlidedView composeButton] addTarget:self action:@selector(presentComposeComment :) forControlEvents:UIControlEventTouchUpInside];'これを実行すると、アプリケーションがクラッシュする'認識できないセレクタがインスタンスに送られました。'' self''はセルのインスタンスです。 – simonbs

関連する問題