嗨,我有一个基于导航栏的应用程序,它有一个推送一个表视图的根视图控制器。我想从其中选择一个值并更改一个单元格的textlabel.text.But,我无法取回值?我尝试将nsstring设置为根视图控制器中的变量,所以我更改了它,但我无法在so视图控制器中访问它。
它不接受self.navigationcontroller.parentviewcontroller.myTableview,它说uiview控制器没有myTableview...
谢谢
发布于 2011-05-11 03:47:16
您不应该让推送的视图控制器请求它需要的信息,除非它是从共享单例请求的。
根视图控制器已经知道如何创建第二个视图控制器并将其推送到导航堆栈上。这是添加更多所需信息的正确位置。可能是这样的(我假设根视图控制器是一个UITableViewController__)
-(void)tableView:(UITableView*)tv didSelectRowAtIndexPath:(NSIndexPath*)ip;
{
UIViewController* vc = [[[MyViewController alloc] initWithRequiredString:
self.someStateString] autorelease];
[self.navigationController pushViewController:vc
animated:YES];
}这样,在环境发生变化时,不需要更改MyViewController。例如,如果应用程序被制作成通用的iPhone/iPad应用程序,视图控制器不应该被推送,而是设置为UISplitViewController的右侧细节视图。这将是唯一需要更改的内容:
-(void)tableView:(UITableView*)tv didSelectRowAtIndexPath:(NSIndexPath*)ip;
{
UIViewController* vc = [[[MyViewController alloc] initWithRequiredString:
self.someStateString] autorelease];
if ([self isPad]) {
NSArray* vcs = [NSArray arrayWithObject:self, vc, nil];
self.splitViewController.viewControllers = vcs;
} else {
[self.navigationController pushViewController:vc
animated:YES];
}
}发布于 2011-05-10 20:16:36
1-你需要告诉编译器"parentViewController“的完整类型
[(YourViewControllerClass*) (self.navigationcontroller.parentviewcontroller) myTableView]2- parentViewController不是导航控制器堆栈上的前一个视图控制器。使用导航控制器的viewControllers属性。它包含堆栈上的视图控制器列表。
发布于 2011-05-10 20:17:03
您应该在app委托中声明一个NSString,并使用app委托变量传递该值
https://stackoverflow.com/questions/5949831
复制相似问题