2014-11-24 13 views
13

Ich benutze UITextFields Methode becomeFirstResponder, um die Tastatur anzuzeigen. Dies funktioniert in iOS 7. Aber in iOS 8 zeigt diese Methode nicht die Tastatur.BecomesFirstResponder funktioniert nicht in iOS 8

UITextField *txtAddNew = [[UITextField alloc] initWithFrame:CGRectMake(10,10,240, 21)]; 
txtAddNew.font = [UIFont fontWithName:@"Helvetica" size:16]; 
txtAddNew.clearButtonMode = UITextFieldViewModeWhileEditing; 
txtAddNew.returnKeyType = UIReturnKeyDone; 
txtAddNew.delegate = self; 
txtAddNew.autocorrectionType = UITextAutocorrectionTypeNo; 
txtAddNew.tag = 15; 

// Open keyboard 
[txtAddNew becomeFirstResponder]; 

Gibt es eine Möglichkeit, es in iOS 8 zu tun?

+1

Ich sehe nicht, dass Sie dieses Textfeld als Unteransicht zu einer Ansicht hinzufügen. –

Antwort

36

Versuche becomeFirstResponder wie der Aufruf unter

[txtAddNew performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0]; 

Wie pro Apfel,

Ein Responder-Objekt wird nur der erste Responder, wenn die aktuellen Responder können resign First-Responder-Status (canResignFirstResponder) und der neue Responder kann First-Responder werden.

Sie können diese Methode aufrufen, um ein Responder-Objekt zu erstellen, z. B. den ersten Beantworter anzuzeigen. Sie sollten es jedoch nur für diese Sicht aufrufen, wenn es Teil einer View-Hierarchie ist. Wenn die Fenstereigenschaft der Ansicht ein UIWindow-Objekt enthält, wurde sie in einer Ansichtshierarchie installiert. Wenn NULL zurückgibt, wird die Ansicht von jeder Hierarchie getrennt.

+0

Ist seltsam, wie das funktioniert, wenn [txtAddNew werdenFirstResponder] in Fällen nicht funktioniert. Was ist der Unterschied? – mskw

+0

So seltsam ... es funktioniert tatsächlich. – Rishab

0

fügen Sie diese Zeile in Ihrem Code hinzu. Ich hoffe, es wird funktionieren

[txtAddNew performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0]; 
3

Ich glaube, Sie die addsubview auf die die txtAddNew verpasst Mainview

txtAddNew.tag = 15; 
    [self.view addsubview:txtAddNew]; 

    // Open keyboard 
    [txtAddNew becomeFirstResponder]; 
1

Manchmal hilft es, zuerst den Ersthelfer zurücktreten:

var tapGesture = UITapGestureRecognizer() 
tapGesture.rac_gestureSignal().subscribeNext { [weak self] (_) -> Void in 
    self?.inputTextField.resignFirstResponder() 
    self?.inputTextField.becomeFirstResponder() 
} 

self.charViewsContainer.addGestureRecognizer(tapGesture) 
+0

das hat bei mir funktioniert, gibt es irgendwelche Apple-dokumentationen, die dich dazu geführt haben? – Austin

0

Für iOS 9.3, die für mich gearbeitet folgenden :

private var searchTextFieldShouldReturn = false 

    override func viewWillAppear(animated: Bool) { 
      super.viewWillAppear(animated) 

      self.searchTextFieldShouldReturn = false 
      self.searchTextField.becomeFirstResponder() 
     } 
    override func viewWillDisappear(animated: Bool) { 
     super.viewWillDisappear(animated) 

     self.searchTextFieldShouldReturn = true 
     self.searchTextField.resignFirstResponder() 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
      self.searchTextFieldShouldReturn = true 
      textField.resignFirstResponder() 

      return true 
     } 

    func textFieldShouldEndEditing(textField: UITextField) -> Bool { 

      return self.searchTextFieldShouldReturn 
     } 

Sie müssen also sicherstellen, dass Sie auch den delegenten textFieldSouldEndEditing implementieren.

0

Für den Fall, andere haben das gleiche Problem wie ich:

ich eine IBOutlet meiner UITextField verbunden hatte. Irrtümlicherweise initiierte ich dies in meiner viewDidLoad Methode. Das heißt [[textField alloc] init];. Ich habe das entfernt und alles hat wieder funktioniert.

9

Swift 3

Hier ist die schnelle 3-Version der akzeptierte Antwort. Damit ich es zur Arbeit bringen konnte, musste ich noch eine Verzögerung hinzufügen.

txtAddNew.perform(
    #selector(becomeFirstResponder), 
    with: nil, 
    afterDelay: 0.1 
) 
0

Swift 4 und iOS 11

In meinem Fall, was kein mater ich versuchte, war ich Ersthelfer setzen nicht in der Lage, bis ich dies versucht.

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 
    if cell.isKind(of: YOURTABLEVIEWCELL.self) { 
     if let yourCell = cell as? YOURTABLEVIEWCELL{ 
      yourCell.yourUiTextField.becomeFirstResponder() 
     } 
    } 
} 

Hoffen, das hilft jemand mit dem gleichen Problem stecken.

Verwandte Themen