Как изменить название UIButton?
MyViewController имеет один UIButton, а другой MainViewController использует MyViewController.
но MainViewController не может изменить название UIButton в MyViewController.
также, в MyViewController только изменить название UIButton в методе viewDidLoad.
Что случилось?
MyViewController
@interface MyViewcontroller : UIViewController {
IBOutlet UIButton *imageButton;
}
@property (nonatomic, retain) UIButton *imageButton;
@implementation MyViewcontroller : UIViewController {
@synthesize imageButton;
- (void)viewDidLoad { // can change button title
[imageButton setTitle:@"buttonTitle" forState:UIControlStateNormal]
}
- (void)setButtonTitle { // can't change button title
[imageButton setTitle:@"buttonTitle" forState:UIControlStateNormal];
}
}
MainViewController
@implementation MainViewController : UIViewController {
@synthesize scrollView;
- (void)viewDidLoad { // can't change button title
MyViewcontroller *myView = [[MyViewcontroller alloc] initWithNibName:@"MyViewcontroller" bundle:nil];
[myView.imageButton setTitle:@"ddd" forState:UIControlStateNormal];
[scrollView addSubview:myView.view];
[myView release], myView = nil;
}
}
Ответы
Ответ 1
Это происходит потому, что выходы не подключаются, пока загрузка не будет загружена, и представление не будет загружено до тех пор, пока оно не будет вызвано в первый раз (это ленивая загрузка). Вы можете исправить это очень легко, просто убедитесь, что вы всегда загружаете представление в первую очередь. Однако вам может потребоваться пересмотреть свой дизайн и сделать название кнопки зависимым от другого элемента, который не является частью иерархии представлений.
Например, если вы переупорядочиваете свои звонки, он будет работать:
MyViewcontroller *myView = [[MyViewcontroller alloc] initWithNibName:@"MyViewcontroller" bundle:nil];
[scrollView addSubview:myView.view]; // view is loaded
[myView.imageButton setTitle:@"ddd" forState:UIControlStateNormal]; // imageButton is now wired