Ios 访问父视图控制器
我有一个Ios 访问父视图控制器,ios,objective-c,uiviewcontroller,uicontainerview,parentviewcontroller,Ios,Objective C,Uiviewcontroller,Uicontainerview,Parentviewcontroller,我有一个mainViewController,其中有一个容器视图。我正试图从容器视图访问主视图控制器 这是我的密码: self.theMainViewController = (theMainViewController *)self.parentViewController; NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0]; [self.theMainViewController .tableVie
mainViewController
,其中有一个容器视图
。我正试图从容器视图
访问主视图控制器
这是我的密码:
self.theMainViewController = (theMainViewController *)self.parentViewController;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0];
[self.theMainViewController .tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom];
这不管用self。当我对其进行nslog
时,主视图控制器给出一个nil
值。然后我替换了:
self.parentViewController
致:
它给了我同样的结果。如何从容器视图的
类访问mainViewController
更新
这是我的设置:(我无法添加图像,因此该答案中发布的图像与我的设置相同。)您可以使用父视图控制器中的“prepareForSegue”将self传递到容器视图,如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"containerview_myIdentifier"]) {
ContainerViewController *vc = [segue destinationViewController];
[vc setReferenceToParentVC:self];
}
}
在其中,您在类型为ParentViewController的ContainerViewController中创建一个合成属性,并将该属性设置为self
以下是您应该在故事板中看到的内容:
MainViewController-ContainerView
您在containerview中创建委托,mainview将从此委托实现
您可以尝试以下方法:
显示如何设置容器视图控制器和子视图控制器。已更新question@Jessica您可能需要按层次重新定义视图控制器。下面是如何实现这一点的精彩描述。什么类型的对象是ReferenceToParentVC
?@Jessica它应该是“ParentViewController”,例如,我的一个例子如下@property(非原子)PagesViewController*referencetorotviewcontroller
只需确保在容器视图控制器的头部声明ParentViewController头,如下所示#import“PagesViewController.h”
哦,这是我的错,我忘了这会创建循环依赖循环。因此,将pacesViewController
声明为@class pacesViewController
然后定期在.mSo中使用#import
声明,我应该执行[vc setReferenceToParentVC:self]代码>?是的。这很好,因为它将变量refereceToParentVC
设置为保存容器视图的ParentViewController
的实例。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"containerview_myIdentifier"]) {
ContainerViewController *vc = [segue destinationViewController];
[vc setReferenceToParentVC:self];
}
}