1

ユーザーがボタンをクリックしたとき (私の場合は写真を拡大したとき)、プログラムで UIToolbar をビューに追加したいと考えています。

click メソッドでツールバーを作成してサブビューに追加するとうまくいくようですが、viewDidLoad メソッドでツールバーを作成し、それをインスタンス変数に割り当て、そのインスタンス変数を後でクリック時にサブビューに追加すると、何も起こりません。が表示されます。デバッガーは、インスタンス変数が UIToolbar であり、null ではないことを示しています。クリックするたびに同じツールバーを作成して破棄したくなかったので、必要に応じてビューに追加および削除するインスタンス変数として保持する方がよいと考えました。これは正しいアプローチですか?

あるケースでは表示され、他のケースでは表示されないのはなぜですか。

設定

@synthesize toolBar;

- (UIToolbar*)createToolbar
{
    UIToolbar* toolbar = [[UIToolbar alloc] init];
    toolbar.frame = CGRectMake(0, self.view.frame.size.height - 44, self.view.frame.size.width, 44); 
    UIBarButtonItem *shareButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(sharePhoto:)];
    NSArray *buttonItems = [NSArray arrayWithObjects:shareButton,nil];
    [toolbar setItems:buttonItems];
    return toolbar;

}

これは機能します

- (void) clickMyButton {

    toolBar = [self createToolbar];
    [self.view addSubview:toolBar];
}

これでは何も表示されません

- (void)viewDidLoad
{
    [super viewDidLoad];
 toolBar = [self createToolbar];

}
- (void) clickMyButton {

    [self.view addSubview:toolBar];
}

後者の場合に機能しないのはなぜですか

4

1 に答える 1

2

問題は、viewDidLoadが呼び出されたときに、ビューとサブビューのフレームが設定されていることが保証されないことです。or[self createToolbar]から呼び出してみてください。viewWillAppearviewDidAppear

于 2013-03-17T21:05:16.277 に答える