我正在构建一个iPad应用程序,我将使用容器视图。
我使用了故事板,因此我添加了2 UIViewControllers
和1 UITableViewController
。
在一个UIViewController
中,我添加了2个容器视图,并通过嵌入segue将每个视图连接到UITableViewController
和另一个UIViewController
。
两个容器视图在app start上都可见。
我使用数组填充了tableview,我正在尝试将字符串传递给另一个UIViewController
到didselectrowatindexpath
。
我可以看到字符串由nslogging传递给viewcontroller,但视图控制器中的标签不会改变。
这是tableviewcontroller中的didselectrowatindexpath:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailVC *detailVC = [[DetailVC alloc] init];
NSString *urlString = [siteAddresses objectAtIndex:indexPath.row];
detailVC.webAddress = urlString;
[detailVC viewWillAppear:YES];
}
,这是接收视图控制器的m文件:
@synthesize webAddress, webview, webURL;
-(void)viewWillAppear:(BOOL)animated
{
self.webAddress = webAddress;
webURL.text = webAddress;
NSLog(@"%@",webAddress);
NSLog(@"%@", webURL.text);
[super viewWillAppear:animated];
}
所有插座和连接都是正确的,但标签文字仍然没有改变。
我正在使用storyboard通过嵌入segues将容器视图连接到控制器。
非常感谢任何帮助。
答案 0 :(得分:1)
您正在使用alloc init
创建新的详细信息视图。相反,您应该参考现有的详细信息视图,例如通过parentViewController
。
答案 1 :(得分:1)
正如其他海报所指出的那样,你在didSelectRowAtIndexPath中创建了一个新的视图控制器实例,这是错误的。
您要做的是编写prepareForSegue,以便检查每个嵌入segue的segue标识符,并保存指向稍后需要引用的每个视图子视图控制器的指针:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString: @"detailVC"]
self.detailVC = segue.destinationViewController;
else if ([segue.identifier isEqualToString: @"childVC2"]
self.childVC2 = segue.destinationViewController;
else if ([segue.identifier isEqualToString: @"childTableVC"]
self.childTableVC = segue.destinationViewController;
}
(显然,您需要在segue上设置包含有意义标识符的故事板,并更改上面的代码以匹配。)
然后你的didSelectRowAtIndexPath方法可能如下所示:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.detailVC updateWebAddressWithString: urlString];
}
请注意,您不应直接调用VC的viewWillAppear:动画方法。
相反,编写一个方法updateWebAddressWithString,它接受一个新的url字符串,将其传递给Web视图,然后触发更新。