Comment désactiver un bouton « Terminé » de la barre de navigation lorsque les diapositives de clavier dans?

StackOverflow https://stackoverflow.com/questions/4136027

Question

Je crois que je ne peux pas le désactiver, car je ne peux pas l'accès que UIBarButttonItem programme
(Soit viewWithTag ou rightBarButtonItem).

Toutes les suggestions (court d'ajouter l'interface sans IB)?
En guise de test, j'ai aussi essayé d'ajouter un bouton programme (à gauche de la barre de navigation), mais il n'a pas afficher dans la barre de navigation.

CODE EN CAUSE (Dans 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];
    }

Détails
        Je pense que cela est une affaire commune parce que ce bouton disgnostic
            a) est un UIBarButttonItem ajouté de la bibliothèque IB à la barre de navigation qui est dans une vue de défilement qui a un certain UITextField's.
            b) se comporte comme prévu (pour enregistrer les données entrées par l'utilisateur, etc.),
à l'exception de ne pas avoir désactivé lorsque le clavier apparaît.
            c) IB> Inspecteur> barre de boutons Attributs d'élément montre:
    Identifier =
Terminé     Tag = 44
    Class = UIBarButtonItem

Était-ce utile?

La solution

Vous pouvez écouter une notification (UIKeyboardWillShowNotification) affiché lorsque les diapositives de clavier dans:

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

Ensuite, mettre en œuvre -keyboardWillShow:.

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

Pour réactiver à nouveau sur le bouton, faire la même chose pour le UIKeyboardDidHideNotification

Autres conseils

Vous devez juste utiliser

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top