2015-08-07 17 views
21

Tôi muốn loại bỏ chức năng "trả lại" của bàn phím trong khi người dùng đang nhập, vì vậy không có dòng mới, vì vậy thay vào đó tôi muốn phím 'return' để hoạt động như 'Xong' để nó sẽ ẩn bàn phím.Thay đổi chức năng 'Quay lại' thành 'Xong' nhanh chóng trong UITextView

Tôi đang sử dụng UITextView, có thể chỉnh sửa được, vì vậy người dùng có thể nhập bài đăng của họ và đăng lên dòng thời gian chính, nhưng vì tôi có các ô cố định, tôi không muốn người dùng có thể nhấn 'return' và bài đăng của họ sẽ nằm ngoài phạm vi thời gian.

Tôi thấy điều này làm việc với UITextField, nhưng không phải với UITextView:

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

Vì vậy, tôi chỉ muốn biết nếu có một cách để làm điều đó trong một UITextView, hoặc ít nhất để có thể che giấu bàn phím nếu nhấn trở lại, thay vì tạo một dòng mới.

Trả lời

57

Bạn có thể thiết lập các loại chìa khóa trở lại của lĩnh vực văn bản:

textField.returnKeyType = UIReturnKeyType.Done 

Cập nhật Bạn chắc chắn có thể sử dụng phương pháp tương tự để thiết lập các phím quay lại để "Done", như đã đề cập ở trên. Tuy nhiên, UITextView không cung cấp gọi lại khi người dùng nhấn phím trả về. Là một khắc phục, bạn có thể thử để xử lý các TextView (TextView: UITextView, phạm vi shouldChangeTextInRange: NSRange, replacementText văn bản: String) gọi đại biểu, và bỏ qua những bàn phím khi bạn phát hiện các đầu vào của một ký tự dòng mới:

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

Điều này đã thay thế chức năng của nút "Quay lại" để ẩn bàn phím. Nó không đăng thêm bất kỳ dòng mới nào. Cảm ơn bạn! –

1

tôi đã thử nhiều mã và cuối cùng này đã làm việc cho tôi trong Swift 3.0 mới nhất [Tháng ba 2017] này đạt được bằng UITextFields

các "ViewController" class nên được thừa hưởng "UITextFieldDelegate" để làm mã này làm việc.

class ViewController: UIViewController,UITextFieldDelegate 

Thêm trường Text với số Tag đúng và số thẻ này được sử dụng để có những kiểm soát đến lĩnh vực văn bản thích hợp dựa trên số thẻ gia tăng được gán cho nó.

override func viewDidLoad() { 

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

Trong đoạn mã trên, các "returnKeyType = UIReturnKeyType.next", nơi sẽ làm cho phím pad trở chính để hiển thị như "Next", bạn cũng có các tùy chọn khác như "Tham/Go" vv, dựa trên của bạn ứng dụng thay đổi các giá trị.

"textFieldShouldReturn" này là một phương thức của UITextFieldĐược kiểm soát và ở đây chúng tôi có lựa chọn trường tiếp theo dựa trên tăng giá trị Thẻ.

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: Tôi đánh giá cao và đồng ý với chỉnh sửa của bạn để xóa tên lớp "UIReturnKeyType" và chỉ sử dụng làm ".go" hoặc ".next", vì chúng là thuộc tính tĩnh. Tôi đã sử dụng một cách rõ ràng để giúp người đọc biết về lớp "UIReturnKeyType" mà chúng tôi đã sử dụng, vì vậy họ có thể truy cập và kiểm tra các tùy chọn thuộc tính khả dụng khác [google, yahoo, send, emergencyCall etc ...] trong lớp học. Điều đó tốt hay bạn cảm thấy muốn loại bỏ tên lớp. –

+0

Câu trả lời này là dành cho UITextFields, nhưng câu hỏi là về UITextView – BJHStudios

+0

Có, Điều này đạt được chỉ bằng cách sử dụng UITextFields, đó là một lựa chọn thay thế mà tôi đã thử và làm việc. –

Các vấn đề liên quan