2011-05-30 6 views
11

Sur un UITextView pour masquer le clavier, il y a la méthode:Ajouter un bouton pour cacher le clavier

... 
    textfield.returnKeyType = UIReturnKeyDone; 
    textfield.delegate = self; 
.... 

-(BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 

} 

mais si je veux laisser le bouton « fait » pour le « retour » et ajouter un bouton à cacher le clavier, comment puis-je?

Répondre

34

Vous pouvez affecter une barre d'outils avec un bouton qui ferme le clavier en tant que inputAccessoryView du champ de texte. Un exemple rapide serait,

UIBarButtonItem *barButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:textField action:@selector(resignFirstResponder)] autorelease]; 
UIToolbar *toolbar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease]; 
toolbar.items = [NSArray arrayWithObject:barButton]; 

textField.inputAccessoryView = toolbar; 
+0

merci, mais si je veux appeler aussi d'une méthode clé? – Vins

+0

Je ne t'ai pas eu. Qu'est-ce que tu veux appeler? –

+0

J'ai une méthode qui enregistre le texte dans une base de données [self saveString]; – Vins

3

Cela peut être fait de façon plus facile!

J'ai fait une vue personnalisée dans IB, dans mon viewController.h je viens de faire un IBOutlet UIView *accessoryView;, les connectés et un - (IBAction)dismissKeyboard;

je mets dans la vue d'une barre d'outils avec un bouton fait, fait une connexion au IBAction un écrit: [textView resignFirstResponder] et

- (void)viewDidLoad 
{ 
    textView.inputAccessoryView = accessoryView; 
    [super viewDidLoad]; 
} 

Mais en réalité, qui ressemble un peu étrange et non-style pomme ... Vous avez une idée?

4

Version 2.0 Swift:

//Declared at top of view controller 
var accessoryDoneButton: UIBarButtonItem! 
let accessoryToolBar = UIToolbar(frame: CGRectMake(0,0,UIScreen.mainScreen().bounds.width, 44)) 
//Could also be an IBOutlet, I just happened to have it like this 
let codeInput = UITextField() 

//Configured in viewDidLoad() 
self.accessoryDoneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: #selector(self.donePressed(_:))) 
self.accessoryToolBar.items = [self.accessoryDoneButton] 
self.codeInput.inputAccessoryView = self.accessoryToolBar 

Swift 4:

//Declared at top of view controller 
var accessoryDoneButton: UIBarButtonItem! 
let accessoryToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 44)) 
//Could also be an IBOutlet, I just happened to have it like this 
let codeInput = UITextField() 

//Configured in viewDidLoad() 
self.accessoryDoneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: #selector(self.donePressed)) 
self.accessoryToolBar.items = [self.accessoryDoneButton] 
self.codeInput.inputAccessoryView = self.accessoryToolBar 

func donePressed() { 
    //Causes the view (or one of its embedded text fields) to resign the first responder status. 
    view.endEditing(true) 
} 

UIToolBar Documentation

'inputAccessoryView' documentation

+0

Où est la méthode 'donePressed'? – rmaddy

+0

' donePressed' est juste une fonction dans votre ' UIViewController' Je démissionne généralement du clavier actif du premier répondeur, puis j'éteins le contrôleur de vue hors de la pile de navigation si je le souhaite. –

Questions connexes