iOS 12 dường như cũng nhận ra mật khẩu textFields theo thuộc isSecureTextEntry
tính chứ không chỉ theo thuộc textContentType
tính, vì vậy, việc làm cho chế độ xem phụ kiện này biến mất là không thực sự khả thi trừ khi bạn đặt cả textContentType thành không có gì và xóa tính năng secureEntry (và gây ra lỗi bảo mật trong ứng dụng của bạn). sau đó ngăn iOS 12 nhận dạng textField dưới dạng textField mật khẩu và hiển thị chế độ xem phụ kiện khó chịu này.
Trong trường hợp của tôi, phụ kiện đã gây ra lỗi khiến ứng dụng của tôi không phản hồi khi chạm vào (Điều này cũng khiến ứng dụng của tôi bị từ chối trong quá trình xem xét ứng dụng). Vì vậy, tôi đã phải loại bỏ tính năng này. Tôi không muốn từ bỏ tính năng bảo mật này nên tôi phải tự giải quyết mọi việc.
Ý tưởng là loại bỏ tính năng secureEntry nhưng tự thêm nó theo cách thủ công. Nó đã hoạt động:
Nó có thể được thực hiện như vậy:
Swift 4 cách:
Đầu tiên, như đã trả lời ở đây, hãy đặt textContentType
thành không:
if #available(iOS 10.0, *) {
passwordText.textContentType = UITextContentType("")
emailText.textContentType = UITextContentType("")
}
Hơn nữa, hãy khai báo một biến String mà sau này sẽ chứa nội dung thực của textField:
var passwordValue = ""
Thêm mục tiêu vào passwordTextField, sẽ được gọi mỗi khi nội dung textField thay đổi:
passwordText.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
Bây giờ đó là những gì sẽ làm điều kỳ diệu, hãy khai báo hàm sẽ xử lý các văn bản thay thế:
@objc func textFieldDidChange(_ textField: UITextField) {
if textField.text!.count > 1 {
if passwordValue.count == 0 {
passwordValue = String(textField.text!)
} else {
passwordValue += textField.text!.substring(from: passwordValue.count)
}
} else {
if textField.text!.count > passwordValue.count {
passwordValue += String(textField.text!.last!)
} else if textField.text!.count < passwordValue.count {
passwordValue = String(passwordValue.dropLast())
}
}
self.passwordText.text = String(repeating: "•", count: self.passwordText.text!.count)
}
Cuối cùng, Set TextField là autocorrectionType
để .no
loại bỏ văn bản tiên đoán:
passwordText.autocorrectionType = .no
Vậy là xong, sử dụng passwordValue
để thực hiện đăng nhập của bạn.
Hy vọng nó sẽ giúp một ai đó.
CẬP NHẬT
Nó cũng bắt các giá trị đã dán, bạn đã quên thêm nó trước đó.
textContentType
thành.textContentType
- Điều này sẽ cho iOS 11 biết rằng các trường của bạn không phải là trường tên người dùng / mật khẩu (mặc dù chúng là như vậy) và ngăn chế độ xem phụ kiện được hiển thị; Một cái gì đó như `self.passwordField.textContentType = .textContentType`