在调用 viewController 之前调用 ViewController 方法的问题
Posted
技术标签:
【中文标题】在调用 viewController 之前调用 ViewController 方法的问题【英文标题】:problems with calling method of ViewController before calling viewController 【发布时间】:2015-11-10 12:19:14 【问题描述】:我在 Xcode 项目中有两个视图控制器(所有视图控制器都是在情节提要中创建的)。
第一个视图控制器有两个(或更多)带有特定背景图像的按钮。第二个视图控制器应在用户触摸某个按钮(某些按钮)后显示该按钮的全屏背景图像。
第二个视图控制器有一个属性UIImageView
,应该在第二个视图控制器的代码中分配和初始化(UIImageView
不在故事板中创建)。
第二个视图控制器是第一个视图控制器的委托,并且有一个方法:
-(void) viewController:(ViewController *) viewController buttonPressed: (UIButton *) button.
每个按钮都有一个到第二个视图控制器的模态segue。
所以接下来是应用程序的动作顺序(我通过调试意识到):
-
用户触摸任何按钮
按钮调用一个动作方法,其中调用了委托方法
viewController:buttonpressed:
。 UIImageView
实例在这个方法中被分配和初始化,使用button backgroundImageForState:
返回的图像
调用第二个视图控制器的viewDidLoad
方法,其中UIImageView
实例应该添加到第二个视图控制器的超级视图并显示在屏幕上。
问题是尽管在委托方法viewController:buttonpressed:
中分配了UIImageView
实例,但该实例在第二个视图控制器的方法viewDidLoad
开始时变为nil
。在viewController:buttonpressed:
中进行的所有操作均无效。
代码如下:
第一个视图控制器代码
- (void)viewDidLoad
[super viewDidLoad];
ViewControllerForImage *temp = (ViewControllerForImage *) [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControlForImage"];
self.delegate = temp;
-(IBAction)buttonPressed:(id)sender
[self.delegate viewController:self buttonPressed:sender];
第二视图控制器代码
@synthesize myImage;
- (void)viewDidLoad
[super viewDidLoad];
[self.view addSubview:myImage];
-(void) viewController:(ViewController *) viewController buttonPressed: (UIButton *) button
myImage = [[UIImageView alloc] initWithImage:[button backgroundImageForState: UIControlStateNormal]];
[myImage setFrame:CGRectMake(0, 0, 320, 504)];
【问题讨论】:
【参考方案1】:为什么不直接在 prepareForSegueMethod 中传递信息?
另外,在您的代码中,为什么要将 viewcontroller 的实例发送回第二个视图控制器?你根本没有使用它。
【讨论】:
谢谢!它帮助到我!我刚刚使用prepareForSeque方法来分配和初始化第二个视图控制器的UIImageView!以上是关于在调用 viewController 之前调用 ViewController 方法的问题的主要内容,如果未能解决你的问题,请参考以下文章
在RelationshipSegue之后调用ViewController中的函数
在加载 ViewController 之前加载 MapView
错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)xcode 错误?
在 ViewController viewDidLoad 之前执行 NSApplicationDelegate 代码