如何获取childViewController中的parentViewController?
How to get the parentViewController in childViewController?
我有一个主 UIViewController
并命名为 AddInformationController
。在这个 mainViewController
我有两个 UIContainerView
。他们每个人都嵌入了一个UITableViewController
。 table 视图控制器被命名为 InformationSegmentController
和 ResultSegmentController
。
我把这个放在 AddInformationController
:
InformationSegmentController *isc = [self.storyboard instantiateViewControllerWithIdentfier:@"InformationSegmentController"];
ResultSegmentController *rsc = [self.storyboard instantiateViewControllerWithIdentifier: @"ResultSegmentController"];
[self addChildViewController: isc];
[self addChildViewController: rsc];
在 InformationSegmentController
class 或 ResultSegmentController
class 中,我尝试记录以下内容:
NSLog(@"%@",self.parentViewController);
但不幸的是,它是零。如何正确获取 parentViewController?我必须使用 prepareForSegue
吗?
// 问题更新:
我发现如果我直接在故事板中创建那些 childViewControllers,我不必再次调用 addChildViewController
方法。
我在 AddInformationController
中尝试 NSLog(@"%@", self.childViewControllers)
结果包含 InformationSegmentController
class 和 ResultSegmentController
class.
但问题是当我在 viewDidLoad
中的两个 childViewContorllers 上调用 NSLog(@"%@", self.parentViewController)
时,结果为零。
你必须这样尝试
//add childview
[self addChildViewController:aVC];
[self.view addSubview:aVC.view];
[aVC didMoveToParentViewController:self];
//remove
[self removeFromParentViewController];
[self didMoveToParentViewController:nil];
[self.view removeFromSuperview];
希望对您有所帮助。
或
在 ChildViewControler
中获得 PerentViewController
的另一种方法是在你的 ChildViewController.h
中创建 @property (strong, nonatomic) AddInformationController *ParentVC;
并从你的 ParentViewController
中分配 viewController
Like
InformationSegmentController *isc = [self.storyboard instantiateViewControllerWithIdentfier:@"InformationSegmentController"];
isc.ParentVC = self;
[self addChildViewController: isc];
为您的容器视图的两个 segue 提供标识符(假设 "InformationSegmentControllerSegue" 和 "ResultSegmentControllerSegue",即)并在您的 AddInformationController 中使用 prepareForSegue,如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"InformationSegmentControllerSegue"]) {
InformationSegmentController *container1 = segue.destinationViewController;
}
else if([[segue identifier] isEqualToString:@"ResultSegmentControllerSegue"]) {
ResultSegmentController *container2 = segue.destinationViewController;
}
}
希望对您有所帮助。
我有一个主 UIViewController
并命名为 AddInformationController
。在这个 mainViewController
我有两个 UIContainerView
。他们每个人都嵌入了一个UITableViewController
。 table 视图控制器被命名为 InformationSegmentController
和 ResultSegmentController
。
我把这个放在 AddInformationController
:
InformationSegmentController *isc = [self.storyboard instantiateViewControllerWithIdentfier:@"InformationSegmentController"];
ResultSegmentController *rsc = [self.storyboard instantiateViewControllerWithIdentifier: @"ResultSegmentController"];
[self addChildViewController: isc];
[self addChildViewController: rsc];
在 InformationSegmentController
class 或 ResultSegmentController
class 中,我尝试记录以下内容:
NSLog(@"%@",self.parentViewController);
但不幸的是,它是零。如何正确获取 parentViewController?我必须使用 prepareForSegue
吗?
// 问题更新:
我发现如果我直接在故事板中创建那些 childViewControllers,我不必再次调用 addChildViewController
方法。
我在 AddInformationController
中尝试 NSLog(@"%@", self.childViewControllers)
结果包含 InformationSegmentController
class 和 ResultSegmentController
class.
但问题是当我在 viewDidLoad
中的两个 childViewContorllers 上调用 NSLog(@"%@", self.parentViewController)
时,结果为零。
你必须这样尝试
//add childview
[self addChildViewController:aVC];
[self.view addSubview:aVC.view];
[aVC didMoveToParentViewController:self];
//remove
[self removeFromParentViewController];
[self didMoveToParentViewController:nil];
[self.view removeFromSuperview];
希望对您有所帮助。
或
在 ChildViewControler
中获得 PerentViewController
的另一种方法是在你的 ChildViewController.h
中创建 @property (strong, nonatomic) AddInformationController *ParentVC;
并从你的 ParentViewController
中分配 viewController
Like
InformationSegmentController *isc = [self.storyboard instantiateViewControllerWithIdentfier:@"InformationSegmentController"];
isc.ParentVC = self;
[self addChildViewController: isc];
为您的容器视图的两个 segue 提供标识符(假设 "InformationSegmentControllerSegue" 和 "ResultSegmentControllerSegue",即)并在您的 AddInformationController 中使用 prepareForSegue,如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"InformationSegmentControllerSegue"]) {
InformationSegmentController *container1 = segue.destinationViewController;
}
else if([[segue identifier] isEqualToString:@"ResultSegmentControllerSegue"]) {
ResultSegmentController *container2 = segue.destinationViewController;
}
}
希望对您有所帮助。