在调用 viewController 之前调用 ViewController 方法的问题
problems with calling method of ViewController before calling viewController
我在 Xcode 项目中有两个视图控制器(所有视图控制器都是在故事板中创建的)。
第一个视图控制器有两个(或更多)带有特定背景图像的按钮。第二个视图控制器应该在用户触摸某个按钮(某个按钮)后显示该按钮的全屏背景图像。
第二个视图控制器有一个 属性 UIImageView
应该在第二个视图控制器的代码中分配和初始化(UIImageView
未在故事板中创建)。
第二个视图控制器是第一个视图控制器的委托并且有一个方法:
-(void) viewController:(ViewController *) viewController buttonPressed: (UIButton *) button.
每个按钮都有到第二个视图控制器的模式转场。
所以接下来是应用程序的操作顺序(我通过调试意识到):
- 用户触摸任何按钮
- 按钮调用一个动作方法,其中调用委托方法
viewController:buttonpressed:
。 UIImageView
实例在此方法中使用 button backgroundImageForState:
返回的图像进行分配和初始化
- 比第二个视图控制器的方法
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 的实例发送回第二个视图控制器?你根本没有使用它。
我在 Xcode 项目中有两个视图控制器(所有视图控制器都是在故事板中创建的)。
第一个视图控制器有两个(或更多)带有特定背景图像的按钮。第二个视图控制器应该在用户触摸某个按钮(某个按钮)后显示该按钮的全屏背景图像。
第二个视图控制器有一个 属性 UIImageView
应该在第二个视图控制器的代码中分配和初始化(UIImageView
未在故事板中创建)。
第二个视图控制器是第一个视图控制器的委托并且有一个方法:
-(void) viewController:(ViewController *) viewController buttonPressed: (UIButton *) button.
每个按钮都有到第二个视图控制器的模式转场。
所以接下来是应用程序的操作顺序(我通过调试意识到):
- 用户触摸任何按钮
- 按钮调用一个动作方法,其中调用委托方法
viewController:buttonpressed:
。UIImageView
实例在此方法中使用button backgroundImageForState:
返回的图像进行分配和初始化
- 比第二个视图控制器的方法
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 的实例发送回第二个视图控制器?你根本没有使用它。