swift
1import UIKit 2 3class EditViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { 4 5 @IBOutlet weak var EditViewTabelView = UITableView() 6 7 var data = [String]() 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 self.view.backgroundColor = UIColor.rgb(r: 204, g: 250, b: 125, alpha: 1) 13 14 // Do any additional setup after loading the view. 15 } 16 17 @IBAction func AddBtr(_ sender: Any) { 18 let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .alert) 19 20 // OKボタンの設定 21 let okAction = UIAlertAction(title: "OK", style: .default, handler: { 22 (action:UIAlertAction!) -> Void in 23 24 // OKを押した時入力されていたテキストを表示 25 if let textFields = alert.textFields { 26 27 // アラートに含まれるすべてのテキストフィールドを調べる 28 for textField in textFields { 29 //self.item.insert(textField.text!, at: 0) 30 self.data.append(textField.text!) 31 //self.EditViewTabelView?.insertRows(at: [IndexPath(row: 0, section: 0)],with: UITableViewRowAnimation.automatic) 32 self.EditViewTabelView?.insertRows(at: [IndexPath(row: 0, section: 0)], with: .automatic) 33 print(textField.text!) 34 } 35 self.EditViewTabelView?.reloadData() 36 } 37 }) 38 alert.addAction(okAction) 39 40 // キャンセルボタンの設定 41 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 42 alert.addAction(cancelAction) 43 44 // テキストフィールドを追加 45 alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in 46 textField.placeholder = "テキスト" 47 }) 48 alert.view.setNeedsLayout() // シミュレータの種類によっては、これがないと警告が発生 49 50 self.present(alert, animated: true, completion: nil) 51 } 52 53 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 54 return data.count 55 } 56 57 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 58 let Cell = tableView.dequeueReusableCell(withIdentifier: "cell3", for: indexPath) 59 60 Cell.textLabel?.text = data[indexPath.row] 61 62 return Cell 63 } 64 65 override func didReceiveMemoryWarning() { 66 super.didReceiveMemoryWarning() 67 // Dispose of any resources that can be recreated. 68 } 69 70}
実現したい事
tabelViewにテキストを挿入させたい。
困っている事
@IBOutlet weak var EditViewTabelView: UITableView!
だとオプショル型のせいで挿入する時に```insertRows``で落ちる。
なので@IBOutlet weak var EditViewTabelView = UITableView()
にしてみたところ落ちる事はなくなったがテキストが挿入されなくて困っている。
それで念のためにprintf
を入れてみたところデバッグには入力したテキストが表示されているのでなぜcellに挿入されないのかを知りたい。
追記
tabelviewインスタンスでは問題はなかったっぽいです。
self.EditViewTabelView?.insertRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)
でEditViewTabelViewに?をつけないと落ちて、つけると落ちなくはなりますがテキストが挿入されないです。
container viewを使わないviewでは今回のようなエラーはなかったです。しかし今回はtabelの上にボタンを乗せたかったのでcontainer viewを使ったところ落ちるようになりました。
参考文献
http://blog.all-in.xyz/2016/06/20/how-to-put-button-on-tableview-which-will-not-scroll-with-table/
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/06/11 15:47
2018/06/12 04:15
退会済みユーザー
2018/06/12 07:32
2018/06/12 07:32
2018/06/12 13:06
退会済みユーザー
2018/06/12 14:54
退会済みユーザー
2018/06/12 14:59 編集
退会済みユーザー
2018/06/12 15:10