在调用 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 代码

调用 AppDelgate 或 ViewController

如何在 ViewController 中调用视图?