Aar*_*ron 5 iphone views objective-c ios
我提出了一个模态视图控制器.在这种模式视图控制器viewDidLoad,我似乎无法找到父VC ....任何引用parentViewController,presentingViewController等等.如果这还没有设置,我怎么得到它的参考?
Rob*_*Rob 10
对于一般解决方案,您可以在第二个控制器中拥有自己的属性,该控制器是weak指向第一个视图控制器的指针.第一个控制器应该在第一个segue中设置第二个控制器的属性prepareForSegue.
在回答您的问题时,parentViewController仅在使用视图控制器包含时设置(您没有这样做).在presentingViewController当你做设置presentViewController,但根据第一视图控制器是否嵌入导航控制器或没有(如果是嵌入式的,第二个视图控制器的行为变化presentingViewController是导航控制器,如果不是,它是视图控制器,你我希望它是.presentingViewController如果你这样做,似乎根本没有设置pushViewController.
最重要的是,如果prepareForSegue在第一个控制器中设置第二个控制器的自定义属性,我发现它更可靠和一致.
所以,在SecondViewController,我有一个.h @interface看起来像:
@class FirstViewController;
@interface SecondViewController : UIViewController
@property (nonatomic, weak) FirstViewController *firstViewController;
@end
Run Code Online (Sandbox Code Playgroud)
然后在第一个视图控制器中,我有一个prepareForSegue看起来像:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"IdentifierForSegueToSecondControllerHere"])
{
SecondViewController *controller = segue.destinationViewController;
controller.firstViewController = self;
}
}
Run Code Online (Sandbox Code Playgroud)
显然,如果您使用故事板,则上述要点适用.如果您正在使用NIB,您可以执行以下操作:
SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
controller.firstViewController = self;
[self presentViewController:controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
无论如何,一旦你firstViewController在你的设置中设置了该属性SecondViewController,它SecondViewController现在可以访问属性或调用公共方法FirstViewController,例如:
// up at the top, where you have your import statements, include the following
#import "FirstViewController.h"
// then, in the @implementation of the SecondViewController, you can reference
// the first view controller and its properties, such as:
self.firstViewController.someStringProperty = @"some value";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5208 次 |
| 最近记录: |