it-swarm.com.de

comeFirstResponder funktioniert nicht in iOS 8

Ich verwende die UITextField-Methode becomeFirstResponder, um die Tastatur anzuzeigen. Dies funktioniert in iOS 7. In iOS 8 wird diese Tastatur jedoch nicht angezeigt.

 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, dies in iOS 8 zu tun?

17
Tejas Bharambe

Versuchen Sie, becomeFirstResponder wie unten aufzurufen

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

Wie bei Apple,

Ein Responder-Objekt wird nur der erste Responder, wenn das aktuelle Responder kann den Ersthelferstatus (canResignFirstResponder) aufgeben und der neue Responder kann Ersthelfer werden.

Sie können diese Methode aufrufen, um ein Responder-Objekt, z. B. eine Ansicht, zur .__ zu machen. erster Rückmelder. Sie sollten es jedoch nur in dieser Ansicht aufrufen, wenn es ist Teil einer Ansichtshierarchie. Wenn die Fenstereigenschaft der Ansicht eine UIWindow-Objekt, es wurde in einer Ansichtshierarchie installiert. wenn es Gibt null zurück, wird die Ansicht von jeder Hierarchie getrennt.

42
thavasidurai

Swift 3

Hier ist die Swift 3-Version der akzeptierten Antwort. Damit es funktioniert, musste ich auch eine Verzögerung hinzufügen.

txtAddNew.perform(
    #selector(becomeFirstResponder), 
    with: nil, 
    afterDelay: 0.1
)
12
Jacob Arvidsson

Ich denke, Sie haben die addsubview die txtAddNew zur Mainview verpasst

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

   // Open keyboard
  [txtAddNew becomeFirstResponder];
3
Anbu.Karthik

Manchmal hilft es, zuerst den Ersthelfer zu kündigen:

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

self.charViewsContainer.addGestureRecognizer(tapGesture)
1
Antoine

Für iOS 9.3 hat folgendes funktioniert:

 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 Delegaten für textFieldShouldEndEditing implementieren.

0
Zoltan Varadi

fügen Sie diese Zeile in Ihren Code ein. ich hoffe, dass es funktionieren wird 

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

Nur für den Fall, dass andere das gleiche Problem haben wie ich:

Ich hatte eine IBOutlet, die mit meiner UITextField verbunden war. Ich habe dies fälschlicherweise in meiner viewDidLoad-Methode initialisiert. Das heißt, [[textField alloc] init];. Ich entfernte das und alles funktionierte wieder. 

0
espitia

Swift 4 und iOS 11

In meinem Fall, egal was ich ausprobiert habe, konnte ich den Ersthelfer nicht einstellen, bis ich dies versuchte.

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()
        }
    }
}

Hoffe, das hilft jemandem, der das gleiche Problem hat.

0