2013-03-17 3 views
1

Я хочу добавить UIToolbar программно в режим просмотра, когда пользователь нажимает кнопку (в моем случае, когда они увеличивают фотографию).Создание UIToolbar программно

Кажется, что это нормально, когда я создаю панель инструментов в методе кликов и добавляю к подзону, но если я создаю панель инструментов в методе viewDidLoad, назначьте ее переменной экземпляра и добавьте эту переменную экземпляра позже в subview при нажатии ничего не появляется. Отладчик показывает, что переменная экземпляра является 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]; 
} 

Почему это не работает в последнем случае

+0

Сохраняется ли ваша панель инструментов с сильной ассоциацией или назначается/слаб? – Shaun

ответ

2

Проблема заключается в том, что когда viewDidLoad вызывается, не гарантируется, что будут установлены кадры для вашего представления и подсмотров. Попробуйте позвонить [self createToolbar] из viewWillAppear или viewDidAppear.

+0

заработал, но заметил странную вещь. Если я переведу вызов createToolbar в viewWillAppear, это не сработает. Однако, если я возьму строку рамки рамки из метода createToolbar и просто добавлю строку сразу после вызова createToolbar, она работает. Почему бы это не сработать, когда он реорганизован в сам метод, даже если он все еще всегда вызван из viewWillAppear – MonkeyBonkey

+0

странным ... попробуйте дважды проверить имя ivar и имя переменной, используемой внутри createToolbar. Возможно, вы устанавливаете рамку ivar непосредственно внутри метода createToolbar, вместо того, чтобы устанавливать рамку панели инструментов, которая будет возвращена, а затем установить на ivar. – Cezar

+0

@ Цезарь appriciate! – Kernelzero

Смежные вопросы