从UITableViewCell到UITableView到UINavigationController的引用

时间:2010-03-13 06:17:07

标签: iphone uitableview

如果用户点击并保持Foo表格视图单元格2秒钟,则应显示模态视图。将新的Foo添加到单元格时,也会显示模态视图。模态视图的委托协议由父UITableView子类实现。

我的点按并检测代码位于Foo UITableViewCell类中。

我很难引用父tableview的导航控制器来显示模态视图。

FooModalViewController *modalController = [[FooModalViewController alloc] initWithNibName:@"FooModalViewController" bundle:nil];
FooTableViewController *tableView = (FooTableViewController *) self.superview;
foo.delegate = tableView;

似乎没问题,但我在引用包含tableview的导航控制器时出现问题。下面的代码构建正常但引发异常 - NSOBject DoesNotRecognizeSelector。

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:modalController];
[[tableView.navigationController] presentModalViewController:navigationController animated:YES];

我想也许我的设计有缺陷......?

2 个答案:

答案 0 :(得分:1)

执行此操作的正确方法是为单元格提供委托协议(例如,- (void)buttonPressedInCell:(UITableViewCell*)cell),按下按钮时使用该协议通知控制器。然后控制器将引用导航控制器,可以做适当的事情。

答案 1 :(得分:0)

表视图单元对象的超级视图只是一个UITableView。它永远不会是一个表视图控制器(FooTableViewController) - 事实上,从视图中找不到视图控制器是没有标准的方法。

您可以尝试使用tableView.delegate来获取视图控制器,因为表视图控制器是其表视图的委托。

[tableView.delegate presentModalViewController:navigationController animated:YES];

假设您的导航控制器已连接到应用代表,您也可以使用

YourAppDelegate* del = [UIApplication sharedApplication].delegate;
[del.navCtrler.visibleViewController
    presentModalViewController:navigationController animated:YES];