Как отключить кнопку «Готово» из навигационной панели, когда клавиатура скользит?
-
30-09-2019 - |
Вопрос
Я верю, что не могу отключить это, потому что я не могу получить к этому доступ UIBarButttonItem
программно
(с ViewWithTag или rightBarButtonItem
).
Какие -нибудь предложения (короткие с добавления интерфейса без IB)?
В качестве теста я также попытался добавить кнопку программно (слева от панели NAV), но она не отображалась в панели NAV.
Соответствующий код (в MyEditorViewControler.m
):
- (void)textFieldDidBeginEditing:(UITextField *)sender { //successfully executes when keyboard slides in
UINavigationItem *item = self.navigationItem; //item = 0x6420e0 OK. (value at debugger breakpoints)
UIBarButtonItem *doneButton4 = (UIBarButtonItem *) [self.view viewWithTag:44]; //doneButton4 = 0x0, not OK.
doneButton4.enabled = NO;
}
- (void)textFieldDidEndEditing:(UITextField *)sender { //successfully executes when keyboard slides out.
...
UIButton* doneButton = (UIButton *)[self.view viewWithTag:44]; //Attempt to re-enable button.
doneButton.enabled = YES;
}
- (void)viewDidLoad { //Attempt to programmatically add a *left* button to the nav bar. Result: Button does not display in nav bar.
....
UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
self.navigationItem.leftBarButtonItem = leftBarButtonItem;
[leftBarButtonItem release];
}
ДЕТАЛИ
Я думаю, что это общий случай, потому что эта кнопка сделана:
а) UIBarButttonItem
добавлено из библиотеки IB в панель навигации, которая находится в просмотре, в котором есть некоторые UITextField's
.
б) ведет себя как и ожидалось (чтобы сохранить пользовательские данные и т. Д.),
За исключением того, что не отключено, когда появляется клавиатура.
в) IB> Инспектор> Атрибуты элемента кнопки кнопок показывают:
Идентификатор = сделано
TAG = 44
Класс = UIBarButtonItem
Решение
Вы можете послушать уведомление (UIKeyboardWillShowNotification
) Опубликовано, когда клавиатура скользит в:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
Затем реализовать -keyboardWillShow:
.
-(void)keyboardWillShow {
UIButton *button = self.navigationItem.leftBarButtonItem;
button.enabled = NO;
}
Чтобы снова поднять кнопку, сделайте то же самое для UIKeyboardDidHideNotification
Другие советы
Вы должны просто использовать
UIBarButtonItem *doneButton = self.navigationItem.leftBarButtonItem;
doneButton.enabled = YES;
//Both of these should work, you shouldn't need any type of IBOutlets for this
UINavigationItem *item = self.navigationItem;
UIBarButtonItem *doneButton = item.leftBarButtonItem;