【发布时间】: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)];
}
【问题讨论】:
标签: ios objective-c uiviewcontroller uiimageview