从 UITableViewCell 到 UITableView 到 UINavigationController 的引用
Posted
技术标签:
【中文标题】从 UITableViewCell 到 UITableView 到 UINavigationController 的引用【英文标题】:Reference from UITableViewCell to UITableView to UINavigationController 【发布时间】:2010-03-13 06:17:06 【问题描述】:如果用户点击并按住 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];
我认为也许我的设计有缺陷..?
【问题讨论】:
【参考方案1】:这样做的正确方法是给单元格一个委托协议(例如,- (void)buttonPressedInCell:(UITableViewCell*)cell
),并在按下按钮时使用它来通知控制器。然后,将引用导航控制器的控制器可以做适当的事情。
【讨论】:
这似乎是最好的方法,但是我最终以不同的方式实现了它。我将 parentNavigation/parentTableView 属性添加到 UITableViewCell 子类。这些是由单元格的 tableView 控制器设置的,即 parentTableView。我将模态控制器的委托设置为parentTableView引用的对象,并用parentNavigation引用的对象显示新的模态视图。似乎工作正常。【参考方案2】:表格视图单元格对象的父视图只是一个 UITableView。它永远不会是一个表视图控制器(FooTableViewController)——事实上,没有标准的方法可以仅从视图中找到视图控制器。
您可以尝试使用tableView.delegate
来获取视图控制器,因为表视图控制器是其表视图的委托。
[tableView.delegate presentModalViewController:navigationController animated:YES];
假设您的导航控制器已连接到您也可以使用的应用代理
YourAppDelegate* del = [UIApplication sharedApplication].delegate;
[del.navCtrler.visibleViewController
presentModalViewController:navigationController animated:YES];
【讨论】:
以上是关于从 UITableViewCell 到 UITableView 到 UINavigationController 的引用的主要内容,如果未能解决你的问题,请参考以下文章
在 UiTableViewCell 上设置时,DisclosureButton Indicator 或任何类型的附件类型似乎都没有出现
如何在 UITableViewCell 中添加多行文本字段?
当附件是UITableViewCellAccessoryCheckmark时,如何将文本置于UITableViewCell中