Я не знаю, почему кнопка исчезает после того, как панель инструментов настроена на скрытие и отображение. как я могу это исправить?

Установить код кнопки

-(void)viewDidAppear:(BOOL)animated {
    //NSLog(@"viewDidAppear ");

    [self becomeFirstResponder];
    //Create a button
    UIBarButtonItem *back = [[UIBarButtonItem alloc] 
                        initWithBarButtonSystemItem:UIBarButtonSystemItemRewind 
                target:self action:@selector(goback:)];

    UIBarButtonItem *fixspace1 = [[UIBarButtonItem alloc] 
                                 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                                 target:self action:nil];

    UIBarButtonItem *next = [[UIBarButtonItem alloc] 
                             initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward 
                             target:self action:@selector(gofwd:)];
    UIBarButtonItem *stop = [[UIBarButtonItem alloc] 
                             initWithBarButtonSystemItem:UIBarButtonSystemItemStop 
                             target:self action:@selector(stopload:)];

    UIBarButtonItem *refresh = [[UIBarButtonItem alloc] 
                             initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh 
                             target:self action:@selector(refreshWeb:)];


    [self.navigationController.toolbar setItems:[NSArray arrayWithObjects:fixspace1, back, fixspace1, stop, fixspace1, next, fixspace1, nil] animated:YES];
    [self.navigationItem setRightBarButtonItem:refresh animated:YES];

    [self.navigationController.view addSubview:self.navigationController.toolbar];

    [stop release];
    [next release];
    [back release];
    [refresh release];
    [fixspace1 release];
}

И я настраиваю свою кнопку по этому методу

-(void)viewDidAppear:(BOOL)animated 

Этот код используется для скрытия панели инструментов

    [self.navigationController setNavigationBarHidden:YES animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
    [self.navigationController setToolbarHidden:YES animated:YES];

alt text

3
RAGOpoR 12 Мар 2010 в 14:21
Можете ли вы опубликовать свой код, в котором вы показываете кнопку? Это ваш метод viewDidAppear
 – 
pheelicks
20 Мар 2010 в 14:17
Какова цель этой строки: [self.navigationController.view addSubview: self.navigationController.toolbar]; Это кажется либо лишним, либо совершенно неправильным. В документации указано, что панель инструментов предназначена для «Для использования при представлении списка действий», что я не думаю, что вы делаете. Даже тогда я не понимаю, зачем вам нужно ДОБАВИТЬ его в представление.
 – 
Amagrammer
20 Мар 2010 в 19:47
Хорошо, я удаляю это! согласен с тобой
 – 
RAGOpoR
23 Мар 2010 в 07:11

3 ответа

Лучший ответ

документированный метод для настройки элементов панели инструментов - через свойство toolbarItems контроллера представления . тот же справочник UINavigationController также указывает свойство toolbar как доступное только для чтения и специально предупреждает

Вы не должны напрямую изменять объект UIToolbar.

Поэтому попробуйте изменить

[self.navigationController.toolbar setItems:[NSArray arrayWithObjects:fixspace1, back, fixspace1, stop, fixspace1, next, fixspace1, nil] animated:YES];

К

[self setToolbarItems:[NSArray arrayWithObjects:fixspace1, back, fixspace1, stop, fixspace1, next, fixspace1, nil] animated:YES];
9
David Gelhar 24 Мар 2010 в 04:35
Спасибо Дэвиду Гелхару, это работает, моя кнопка вернулась после того, как скрылась!
 – 
RAGOpoR
24 Мар 2010 в 18:20
Отличный ответ ... я уверен, что сэкономил мне 20 минут :)
 – 
jkp
9 Май 2010 в 01:18

Не видя лучших ответов, я продвигаю свой предыдущий комментарий. Попробуйте вынуть эту строку:

[self.navigationController.view addSubview:self.navigationController.toolbar];

Я не экспериментировал ни с чем подобным, но это выглядит неправильно и очень противоречит философии iPhone SDK. Если у объекта контроллера уже есть указатель на панель инструментов, зачем вам добавлять его в представление? Если это подходящее место, объект контроллера сделает это сам.

1
Amagrammer 21 Мар 2010 в 02:45
Спасибо Amagrammer, вы правы насчет этой строки, но когда я скрываю и показываю панель инструментов, моя кнопка исчезает, как я могу перезвонить им?
 – 
RAGOpoR
21 Мар 2010 в 04:48
Пожалуйста, покажите нам код, который вы используете, чтобы скрыть И показать. Кроме того, если панель инструментов находится на панели навигации, вам, вероятно, не нужно скрывать оба - только панель навигации.
 – 
Amagrammer
21 Мар 2010 в 16:12
Этот код используется для скрытия панели инструментов [self.navigationController setNavigationBarHidden: ДА, анимировано: ДА]; [[UIApplication sharedApplication] setStatusBarHidden: ДА, анимация: ДА]; [self.navigationController setToolbarHidden: ДА, анимация: ДА];
 – 
RAGOpoR
21 Мар 2010 в 19:05
... и показать? Это то, что мне действительно нужно увидеть.
 – 
Amagrammer
21 Мар 2010 в 21:34
Если (переключить) {[self.navigationController setNavigationBarHidden: ДА, анимировано: ДА]; [[UIApplication sharedApplication] setStatusBarHidden: ДА, анимация: ДА]; [self.navigationController setToolbarHidden: ДА, анимация: ДА]; self.navigationController.hidesBottomBarWhenPushing = ДА; } else {[[UIApplication sharedApplication] setStatusBarHidden: НЕТ анимации: ДА]; [self.navigationController setNavigationBarHidden: НЕТ анимации: ДА]; [self.navigationController setToolbarHidden: НЕТ анимации: ДА]; }
 – 
RAGOpoR
22 Мар 2010 в 05:14

Я не сомневаюсь, что вам следует отпускать кнопки панели инструментов сразу после их добавления на панель инструментов. Вы должны сохранить их в переменных экземпляра и освободить их в своем dealloc.

0
Jakob Borg 21 Мар 2010 в 00:35
В этом нет ничего плохого. Контроллер навигации хранит ссылки на них, и этого достаточно.
 – 
Amagrammer
21 Мар 2010 в 02:06