Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 子容器视图中的UILabel未更新_Ios_Objective C_Uiviewcontroller - Fatal编程技术网

Ios 子容器视图中的UILabel未更新

Ios 子容器视图中的UILabel未更新,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,我正在构建一个iPad应用程序,在其中我将使用容器视图 我使用故事板,因此添加了2个uiviewcontroller和1个UITableViewController 在一个UIViewController中,我添加了两个容器视图,并通过嵌入段将每个视图连接到UITableViewController和另一个UIViewController 两个容器视图在应用程序启动时都可见 我用数组填充了tableview,并试图通过didselectrowatindexpath将字符串传递给另一个UIView

我正在构建一个iPad应用程序,在其中我将使用容器视图

我使用故事板,因此添加了2个
uiviewcontroller
和1个
UITableViewController

在一个
UIViewController
中,我添加了两个容器视图,并通过嵌入段将每个视图连接到
UITableViewController
和另一个
UIViewController

两个容器视图在应用程序启动时都可见

我用数组填充了tableview,并试图通过
didselectrowatindexpath
将字符串传递给另一个
UIViewController

我可以看到字符串通过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];
}
@synthesize webAddress, webview, webURL;

-(void)viewWillAppear:(BOOL)animated
{

    self.webAddress = webAddress;
    webURL.text = webAddress;
    NSLog(@"%@",webAddress);
    NSLog(@"%@", webURL.text);
    [super viewWillAppear:animated];
}
下面是接收视图控制器的m文件:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailVC *detailVC = [[DetailVC alloc] init];
    NSString *urlString = [siteAddresses objectAtIndex:indexPath.row];
    detailVC.webAddress = urlString;

    [detailVC viewWillAppear:YES];
}
@synthesize webAddress, webview, webURL;

-(void)viewWillAppear:(BOOL)animated
{

    self.webAddress = webAddress;
    webURL.text = webAddress;
    NSLog(@"%@",webAddress);
    NSLog(@"%@", webURL.text);
    [super viewWillAppear:animated];
}
所有插座和连接都正确,但标签文本仍然不变

我使用故事板通过嵌入序列将容器视图连接到控制器


非常感谢您的帮助。

您正在使用
alloc init
创建一个新的详细视图。相反,您应该参考现有的详细信息视图,例如通过
parentViewController

正如其他海报所指出的,您正在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;
}
(显然,您需要在序列上设置有意义的标识符的故事板,并更改上面的代码以匹配。)

那么您的didSelectRowatineXpath方法可能如下所示:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.detailVC updateWebAddressWithString: urlString];
}
请注意,您不应该直接调用VC的ViewWillDisplay:animated方法


相反,请编写一个方法updateWebAddressWithString,该方法接受一个新的url字符串,将其传递给web视图,然后触发一个更新。

我猜您实际上并没有更新标签。有许多不同的可能性可以解释为什么会发生这种情况,但最明显的是
webURL
是一个空指针。您似乎在
didSelect…
上分配了一个新的控制器,而不是在childController上设置属性(您可以通过父控制器的
childViewControllers
属性获取对嵌入式控制器的引用)。如何通过parentViewController引用详细视图?为容器控制器提供一个包含详细视图控制器的
@属性
。然后使用
self.parentViewController.detailViewController
。表视图控制器实际上是一个子视图控制器,而详细视图控制器也是一个子视图控制器r、 因此,在DidSelectRowatingIndexPath中添加[self.detailVC…]将无法工作?如何从tableviewcontroller访问详细信息子视图控制器?谢谢