Как отключить кнопку «Готово» на панели навигации, когда клавиатура вставляется? - PullRequest
2 голосов
/ 09 ноября 2010

Я считаю, что не могу отключить его, потому что не могу получить к нему доступ UIBarButttonItem программно
(с помощью viewWithTag или rightBarButtonItem).

Любые предложения (если не считать добавления интерфейса без IB)?
В качестве теста я также попытался добавить кнопку программно (слева от панели навигации), но она не отображалась в панели навигации.бар.

СООТВЕТСТВУЮЩИЙ КОД (В 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];
    }

ДЕТАЛИ
Я думаю, что это обычный случай, потому что кнопка Готово:
a) является UIBarButttonItem добавлено из библиотеки IB в панель навигации, которая находится в представлении прокрутки, с некоторыми UITextField's.
b) ведет себя как ожидалось (для сохранения введенных пользователем данных и т. д.),
за исключением того, что не отключается при вводе с клавиатурыПоявляется
c) IB> Инспектор> Значки элементов панели кнопок:
Идентификатор = Готово
Метка = 44
Класс = UIBarButtonItem

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

Вы должны просто использовать

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;
1 голос
/ 09 ноября 2010

Вы можете прослушать уведомление (UIKeyboardWillShowNotification), опубликованное, когда клавиатура вставит:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

Затем внедрите -keyboardWillShow:.

-(void)keyboardWillShow {
    UIButton *button = self.navigationItem.leftBarButtonItem;
    button.enabled = NO;
}

Чтобы снова включить кнопку, сделайте то же самое для UIKeyboardDidHideNotification

...