在调用 viewController 之前调用 ViewController 方法的问题

problems with calling method of ViewController before calling viewController

我在 Xcode 项目中有两个视图控制器(所有视图控制器都是在故事板中创建的)。

第一个视图控制器有两个(或更多)带有特定背景图像的按钮。第二个视图控制器应该在用户触摸某个按钮(某个按钮)后显示该按钮的全屏背景图像。

第二个视图控制器有一个 属性 UIImageView 应该在第二个视图控制器的代码中分配和初始化(UIImageView 未在故事板中创建)。

第二个视图控制器是第一个视图控制器的委托并且有一个方法:

-(void) viewController:(ViewController *) viewController buttonPressed: (UIButton *) button.

每个按钮都有到第二个视图控制器的模式转场。

所以接下来是应用程序的操作顺序(我通过调试意识到):

  1. 用户触摸任何按钮
  2. 按钮调用一个动作方法,其中调用委托方法viewController:buttonpressed:UIImageView 实例在此方法中使用 button backgroundImageForState:
  3. 返回的图像进行分配和初始化
  4. 比第二个视图控制器的方法viewDidLoad被调用,其中UIImageView实例应该被添加到第二个视图控制器的超级视图并显示在屏幕上。

问题是尽管在委托方法viewController:buttonpressed:中分配了UIImageView实例,但该实例在开始时变为nil第二个视图控制器的方法viewDidLoad。在 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)];
}

为什么不直接在 prepareForSegueMethod 中传递信息?

同样在您的代码中,为什么要将 viewcontroller 的实例发送回第二个视图控制器?你根本没有使用它。