如果用户点击并保持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];
我想也许我的设计有缺陷......?
答案 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];