web-dev-qa-db-ja.com

UIButtonのタイトルを変更する方法は?

MyViewControllerには1つのUIButtonがあり、別のMainViewControllerはMyViewControllerを使用します。

ただし、MainViewControllerはMyViewControllerのUIButtonタイトルを変更できません。

また、MyViewControllerでは、viewDidLoadメソッドのUIButtonタイトルのみを変更します。

どうしましたか?

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;
    }
}
13
seapy

これは、ビューが読み込まれるまでアウトレットが配線されず、ビューが最初に呼び出されるまで読み込まれないために発生します(遅延読み込みです)。常に最初にビューをロードするようにするだけで、これを非常に簡単に修正できます。ただし、デザインを再検討し、ボタンのタイトルをビュー階層の一部ではない他のアイテムに依存させることをお勧めします。

たとえば、通話を並べ替えると、次のように機能します。

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
40
Jason Coco