2015-08-07 10 views
21

Chciałbym pozbyć się funkcji "powrotu" klawiatury podczas pisania przez użytkownika, więc nie ma nowych linii, więc zamiast tego chciałbym klawisz "return", aby działał jako "Gotowe", aby ukryć klawiaturę.Zmiana funkcji przycisku "Zwróć" na "Gotowe" w trybie UITextView

Używam UITextView, który można edytować, aby użytkownik mógł wpisać swój wpis i opublikować go na głównej osi czasu, ale ponieważ mam już naprawione komórki, nie chcę, aby użytkownik mógł naciśnij "return", a ich wpis będzie poza zasięgiem osi czasu.

znalazłem to, że współpracuje z UITextField, ale nie z UITextView:

func textFieldShouldReturn(textField: UITextField!) -> Bool { 
    textField.resignFirstResponder() //if desired 
    return true 
} 

Więc chciałem po prostu wiedzieć, czy istnieje sposób, aby to zrobić w UITextView, albo przynajmniej być w stanie ukryć klawiatura zostanie naciśnięta, aby wrócić, zamiast tworzyć nową linię.

Odpowiedz

57

Można ustawić typ klucza powrót z pola tekstowego:

textField.returnKeyType = UIReturnKeyType.Done 

Aktualizacja Można zdecydowanie użyć tego samego podejścia, aby ustawić klawisz powrotu do „Gotowe”, jak wspomniano powyżej. Jednak UITextView nie zapewnia wywołania zwrotnego, gdy użytkownik kliknie klawisz powrotu. Jako obejście, można spróbować obsłużyć TextView (TextView: UITextView, zakres shouldChangeTextInRange: NSRange, replacementText text: String) wywołanie delegata i schować klawiaturę, gdy wykryje wejście znakiem nowego wiersza:

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { 
    if (text == "\n") { 
     textView.resignFirstResponder() 
    } 
    return true 
} 
+0

To zastąpiło funkcję przycisku "Powrót", aby ukryć klawiaturę. Nie powoduje dodania nowych linii. Dziękuję Ci! –

1

próbowałem wielu kodów i wreszcie ten pracował dla mnie w Swift 3.0 Najnowsze [marca 2017] ten osiągnięto za pomocą UITextFields

Klasa „ViewController” należy odziedziczyła „UITextFieldDelegate” na co ten kod działa.

class ViewController: UIViewController,UITextFieldDelegate 

Dodaj pole tekstowe z właściwą liczbę tagów i numer ten znacznik jest używany do przejąć kontrolę na odpowiednim polu tekstowym podstawie bieżących numer etykiety przypisanej do niego.

override func viewDidLoad() { 

    userNameTextField.delegate = self 
    userNameTextField.tag = 0 
    userNameTextField.returnKeyType = .next 
    passwordTextField.delegate = self 
    passwordTextField.tag = 1 
    passwordTextField.returnKeyType = .go 
} 

W powyższym kodzie „returnKeyType = UIReturnKeyType.next”, gdzie dokona Klawisz powrotu pad będzie wyświetlany jako „next” mieć również inne opcje jak „Join/Go” etc, w oparciu o swoje aplikacja zmienia wartości.

Ten "textFieldShouldReturn" jest metodą kontrolowaną przez UITextFieldDelegate i tutaj mamy kolejny wybór pola w oparciu o przyrost wartości Tag.

func textFieldShouldReturn(_ textField: UITextField) -> Bool 
{ 
    if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField { 
     nextField.becomeFirstResponder() 
    } else { 
     textField.resignFirstResponder() 
     return true; 
    } 
    return false 
} 
+0

@ Sanf0rd: Doceniam i zgadzam się z twoją zmianą, aby usunąć nazwę klasy "UIReturnKeyType" i po prostu użyj jako ".go" lub ".next", ponieważ są to właściwości statyczne. Wyraźnie wykorzystałem pomoc dla czytelników, aby dowiedzieć się o tej klasie "UIReturnKeyType", której używaliśmy, aby mogli sprawdzić inne dostępne opcje nieruchomości [google, yahoo, send, emergencyCall itp.] W klasie. Czy to dobrze, czy też chcesz usunąć nazwę klasy. –

+0

Ta odpowiedź dotyczy UITextFields, ale pytanie dotyczy UITextView – BJHStudios

+0

Tak, jest to osiągnięte tylko przy użyciu UITextFields, który jest alternatywną opcją, którą próbowałem i działałem. –