チャット画面を作成中にうまく実装ができない
チャット画面を作成しています。
tableviewを作成し、そこにチャットを書いています。
その後に、送信用のテキストと送信ボタンを持つxibをtableviewの上に置いたのですが、そこでエラーが出てしまい、止まっています。
発生している問題・エラーメッセージ
Thread 1: Fatal error: init(coder:) has not been implemented
該当のソースコード
Swift
1#送信用テキストとボタンの部分 2 3import UIKit 4 5class ChatInputAccessoryView: UIView { 6 7 override init(frame: CGRect) { 8 super.init(frame: frame) 9 10 nibInit() 11 } 12 13 private func nibInit() { 14 let nib = UINib(nibName: "ChatInputAccessoryView", bundle: nil) 15 guard let view = nib.instantiate(withOwner: self, options: nil).first as? UIView else { return } 16 17 view.frame = self.bounds 18 view.autoresizingMask = [.flexibleHeight, .flexibleWidth] 19 self.addSubview(view) 20 } 21 22 required init?(coder: NSCoder) { 23 fatalError("init(coder:) has not been implemented") #ここでエラー 24 } 25 26}
Swift
1#チャット画面のソースコード 2 3import UIKit 4import ChameleonFramework 5import Firebase 6 7class ChatViewController: UIViewController { 8 9 private let cellId = "cellId" 10 11 private var chatInputAccessoryView: ChatInputAccessoryView = { 12 13 let view = ChatInputAccessoryView() 14 view.frame = .init(x: 0, y: 0, width: view.frame.width, height: 100) 15 return view 16 17 }() 18 19 @IBOutlet weak var tableView: UITableView! 20 21 override func viewDidLoad() { 22 23 tableView.delegate = self 24 tableView.dataSource = self 25 tableView.register(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: cellId) 26 tableView.backgroundColor = .rgb(red: 118, green: 140, blue: 180) 27 28 } 29 30 override var inputAccessoryView: UIView? { 31 32 return chatInputAccessoryView 33 34 } 35 36 override var canBecomeFirstResponder: Bool { 37 return true 38 } 39 40} 41 42extension ChatViewController: UITableViewDelegate, UITableViewDataSource{ 43 44 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 45 46 tableView.estimatedRowHeight = 50 47 48 return UITableView.automaticDimension 49 } 50 51 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 52 return 10 53 } 54 55 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 56 let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) 57 58 return cell 59 } 60 61 62} 63 64
わかっている部分
Fatalerrorと出ているため、storyboardに置くときにエラーが出ていると思います。
補足情報(FW/ツールのバージョンなど)
以下のyoutubeを参考にしました。
https://www.youtube.com/watch?v=5rqbm3rj3f0
ChatInputAccessoryView が storyboard か xib に間違って置かれてるのでは?
回答ありがとうございます!
ChatInputAccessoryViewはChatViewControllerに紐ずくstoryboardの上に置きたいのですが、それでエラーが出てしまうのですか?
ChatInputAccessoryView そのものは ChatViewController で作ってるので storyboard に置く必要はないし、ChatInputAccessoryView の中身は xib ファイルに書いてえるようですが、addChildview してるので、xib にも ChatInputAccessoryView そのものは置く必要がないはずです。
なぜこのようなエラーが出ているのかわからないのですが、お聞きしてもよろしいですか?