##前提・実現したいこと
TextFieldへ文字を入力する際に、開業ボタンを押されたらキーボードが閉じられる実装にしたいです。
しかし、エラー(後述)が出てしまいコンパイルが通りません。
##発生している問題・エラー文
- エラー文
Invalid redeclaration of 'textFieldShouldReturn'
2. ワーニング文
Instance method 'textFieldShouldReturn' nearly matches optional requirement 'textFieldShouldClear' of protocol 'UITextFieldDelegate'
Make 'textFieldShouldReturn' private to silence this warning
##該当のソースコード
Swift5
1import UIKit 2 3class ViewController: UIViewController { 4 private let Log = Logger(category: "ViewCtrl" )! 5 6 var sendMssView: UITableView = UITableView(frame: CGRect(x: 0,y: 0,width: 410,height: 600), style: UITableView.Style.plain) // 送信メッセージのテーブルビュー 7 var mssBox: UITextField = UITextField(frame: CGRect(x: 5, y: 750, width: 275, height: 25)) // 送信するメッセージを入力するフォーム 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 /* TableViewの初期化 */ 13 sendMssView.delegate = self 14 sendMssView.dataSource = self 15 sendMssView.register(UITableViewCell.self, forCellReuseIdentifier: "myCell") //Cellを登録する 16 self.view.addSubview(sendMssView) 17 18 /* TextField初期化 */ 19 mssBox.delegate = self 20 mssBox.text = "your message" // メッセージボックス内の文字 21 mssBox.borderStyle = .roundedRect // メッセージボックスのか枠線 22 mssBox.clearButtonMode = .whileEditing // 文字を全消しするボタン 23 self.view.addSubview(mssBox) 24 25 } 26} 27 28/* UITableViewの拡張 */ 29extension ViewController: UITableViewDelegate, UITableViewDataSource { 30 31 /* recvMssViewのセルの行数を指定する */ 32 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 33 return MessageList.sendMssList.count // リスト内の格納分を提供 34 } 35 36 /* sendMssViewのセルの中身を指定する */ 37 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 38 // 文字を表示するセルを取得する 39 let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) 40 // セルの中身を設定する 41 cell.textLabel!.text = MessageList.sendMssList[indexPath.row] 42 return cell 43 } 44 45 func addMssToView (){ 46 DispatchQueue.global(qos: .userInitiated).async { 47 DispatchQueue.main.async { 48 self.sendMssView.reloadData() 49 } 50 } 51 } 52 53} 54 55extension ViewController: UITextFieldDelegate { 56 57 /* 入力用キーボードをEnterで非表示にする */ 58 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 59 textField.resignFirstResponder() 60 return true 61 } 62 63 /* 64 UITextFieldが編集された直前に呼ばれる 65 */ 66 func textFieldDidBeginEditing(_ textField: UITextField) { 67 Log.i("mssBox Begin") 68 if textField == mssBox { 69 MessageList.sendMss = textField.text! 70 } 71 } 72 73 /* 74 UITextFieldが編集された直後に呼ばれる 75 */ 76 func textFieldDidEndEditing(_ textField: UITextField) { 77 if textField == mssBox { 78 Log.i("mssBox End") 79 80 } 81 } 82}
##自分で調べたことや試したこと
ワーニング文ではprivateにするよう促してきますが、
他所でこのように直すとうまく機能しなくなること、
https://teratail.com/questions/213709
textFieldShouldClearは今回実装したい機能とは全く別のものであることも確認しています。
https://developer.apple.com/documentation/uikit/uitextfielddelegate/1619603-textfieldshouldreturn
https://developer.apple.com/documentation/uikit/uitextfielddelegate/1619594-textfieldshouldclear
##使っているツールのバージョンなど補足情報
Swift 5.0
Xcode 11.0
iOS 12.3
MacOS Mojave 10.14.6
都合上、アップデートができません。
ご助力いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。