Как изменить заголовок UIButton? - PullRequest
13 голосов
/ 10 октября 2010

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 Ответ

39 голосов
/ 10 октября 2010

Это происходит потому, что выходы не подключаются до тех пор, пока не будет загружено представление, а представление не будет загружено до тех пор, пока его не вызовут в первый раз (загрузка ленивая). Вы можете легко исправить это, просто убедившись, что вы всегда загружаете представление в первую очередь. Однако вы можете пересмотреть свой дизайн и сделать заголовок кнопки зависимым от какого-либо другого элемента, который не является частью иерархии представления.

Например, если вы измените порядок звонков, он будет работать:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...