2010-11-09 4 views
2

Я считаю, что я не могу отключить его, потому что я не могу получить доступ к этому UIBarButttonItem программным путем
(с любым видомWithTag или 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]; 
    } 

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

ответ

1

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

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

Затем установите -keyboardWillShow:.

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

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

+0

С keyboardWillShow У меня есть доступ к leftBarButtonItem (большой), но эта кнопка (созданный программно в viewDidLoad) \t \t \t \t \t \t \t \t \t \t \t \t не отображается в панели навигации (созданной в IB). \t \t \t \t \t \t \t \t \t \t \t \t Так что я не могу сказать, если он был отключен или нет. Как получить этот элемент leftBarButtonItem? – sambaMan

+0

РЕШЕНИЕ: Большое спасибо за ответы. Он работает сейчас. Хитрость заключалась в том, что вместо того, чтобы захватывать кнопку напрямую, сначала захватить бар наблок, а затем взять с нее кнопку. UINavigationBar * navBar = (UINavigationBar *) [self.view viewWithTag: 22]; , затем включите и отключите текст textFieldDidBeginEditing textFieldDidEndEditing. Большое спасибо. – sambaMan

2

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

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; 
+0

Да, я установил, что, но это не главная проблема. \t \t \t \t \t \t \t \t \t \t \t \t \t В коде выше, речь идет либо: \t \t \t \t \t \t \t \t \t \t \t \t 1), как получить тест leftBarButtonItem для отображения первой (а затем включить/выключить это) ИЛИ \t \t \t \t \t \t \t \t \t \t \t \t 2) как получить кнопку IB (не классифицируется как влево или вправо), чтобы отключить (только это будет сделано, это должно быть тривиально, чтобы включить). – sambaMan

+0

Да, я ничего не добавил (Розетки или свойства) в .h для этого. – sambaMan

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