从UITableViewCell中的子视图调用UINavigationController

时间:2011-08-15 19:55:43

标签: iphone uitableview uinavigationcontroller subview modalviewcontroller

我有一个表格视图,其中我已将子单元格子类化。在这些单元格中,我添加了UIView的子视图。滑动单元格时,我将另一个UIView添加到UITableViewCell的子类。

我想在第二个UIView(UITableViewCell中的子视图)内按下按钮时呈现ModalViewController。我在这个视图中没有导航控制器,因此我从视图控制器传递导航控制器,我的表视图在里面和下面到我的第二个UIView。

在这里,我像往常一样称呼它,但没有任何反应。

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

有没有人知道我可能做错了什么或有其他解决方案?

编辑:这就是我设置navController

的方式

首先我将它传递给我的UITableViewCell的子类。

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

子类的方法setNavigationControllerForSlidedView:如下所示:

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

FeedSlidedView我已声明并合成UINavigationController *navController;

1 个答案:

答案 0 :(得分:4)

这种方式与MVC(模型 - 视图 - 控制器)设计实践相反。您有许多机制可以在Apple的SDK中提供的MVC框架中完成您想要的内容。在我看来,最简单的可能是在UITableViewCell的子视图中为按钮添加目标动作。在视图控制器的tableView:cellForRowAtIndexPath:方法中,添加如下内容:

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

在这种情况下,self将是负责有问题的UITableView的UIViewController。然后,您将在该视图控制器中包含上面选择器的方法:

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

请注意,我不是将presentModalViewController:animated:消息发送到导航控制器,而是发送视图控制器。