[Swift] UIAlertController에서 검증합니다~ 문자 수에 따라 오류 메시지가 표시되고 버튼이 올바르지 않습니다~
개시하다
UIAlertController를 사용하여 유효성을 검사하는 방법입니다.
UIAlertController를 사용하여 유효성 검사를 위한 입력용 대화 상자를 만듭니다!이렇게 말하면 좀 미묘하지만 꼭 참고해 주세요.
이번에 실시된 것은 다음과 같다.
컨디션
Swift5
Xcode13.3
iOS15
이루어지다
필요한 곳에 호출할 수 있도록 UIAlertController를 확장합니다.
확장 클래스
import UIKit
extension UIAlertController {
static func addAlertWithValidation(
register: @escaping (_ text: String) -> Void
) -> UIAlertController {
let descriptionString = "入力してください"
let validationString = "5文字以内で入力してください"
var alert = UIAlertController()
var token: NSObjectProtocol?
// UIAlertControllerを作成する
alert = UIAlertController(title: "登録ダイアログ", message: descriptionString, preferredStyle: .alert)
// 登録時の処理
let registerAction = UIAlertAction(title: "登録", style: .default, handler: { _ in
guard let textFields = alert.textFields else { return }
guard let text = textFields[0].text else { return }
register(text)
guard let token = token else { return }
// オブサーバ登録を解除・・・①
NotificationCenter.default.removeObserver(token)
})
// キャンセル時の処理
let cancelAction = UIAlertAction(title: "キャンセル", style: .cancel, handler: { _ in
guard let token = token else { return }
// オブサーバ登録を解除・・・①
NotificationCenter.default.removeObserver(token)
})
// テキストフィールドを追加
alert.addTextField { (textField: UITextField!) -> Void in
// テキスト変更の通知を受け取るためにオブサーバを登録する・・・②
token = NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: nil, queue: nil) { _ in
let text = textField.text ?? ""
registerAction.isEnabled = false
if text.count > 5 {
// 入力文字が5文字より多い場合(バリデーションエラー)
let messageString = "\(descriptionString)\n\(validationString)"
let range: NSRange = NSString(string: messageString).range(of: validationString )
let alertText = NSMutableAttributedString(string: messageString)
// validationStringのみを赤字にする・・・③
alertText.addAttributes([
.foregroundColor: UIColor.red,
], range: range)
alert.setValue(alertText, forKey: "attributedMessage")
} else {
// 入力文字が5文字以内の場合(正常)
let alertText = NSMutableAttributedString(string: descriptionString)
alert.setValue(alertText, forKey: "attributedMessage")
if text.count != 0 {
// 登録ボタン非活性(未入力時)
registerAction.isEnabled = true
}
}
}
}
// 登録ボタン非活性(初期表示)
registerAction.isEnabled = false
alert.addAction(cancelAction)
alert.addAction(registerAction)
return alert
}
}
포인트는 3점입니다.소환자
이것은 위에서 만든 방법을 사용한 것일 뿐이다.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func tapButton(_ sender: Any) {
present(UIAlertController.addAlertWithValidation(
register: { text in
// 登録時の処理
}
), animated: true)
}
}
또한 방법에 파라미터를 추가하여 문자 수의 상한선을 입력해도 변할 수 있다.(상한 문자수 전달, 대화상자 유형 분류 후 enum 형식으로 전달 등)이렇게 하면 사용하기에 더욱 편리하고 레벨을 확장하여 준비한 맛도 더욱 크다.
참고 자료
Reference
이 문제에 관하여([Swift] UIAlertController에서 검증합니다~ 문자 수에 따라 오류 메시지가 표시되고 버튼이 올바르지 않습니다~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tomsan96/articles/045226e19a5ca8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)