TableViewのCellを任意のタイミングで追加したい
以下のソースでは、起動時にitemes
にあるものがテーブルのセルに格納されます。
ここに
func addCell(){
//データの追加と追加したデータを元にテーブルビューの更新をしたい
objects.insert(NSDate(), at: 0)
let indexPath = IndexPath(row: 0, section: 0)
tableView.insertRows(at: [indexPath], with: .automatic)
}
のような,関数(これはそのままinsertNewObject
ですが)をつくって追加したいのですが,objectsにデータが追加されても、実際のテーブルには反映されません。
理想としてはinsertNewObject
とtableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCella
が走るような動作が出来るといいのでしょうか?
ここを参考にしても出来ません。
http://ameblo.jp/highcommunicate/entry-12059919502.html より
// セルに新しいデータを追加
@IBAction func tapAdd(sender: AnyObject) {
// myItemsに追加.
myItems.addObject("タイトルNEW")
// TableViewを再読み込み.
tableView.reloadData()
}
そんて
(func insertNewObject(_ sender: Any)
や, override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCella
を参考にしたが、出来ないが,tableView
にadd(+)
ボタンを配置し押下したときに上記二つが走る為)
どうしたら追加されるか,ご教授いただけないでしょうか。
よろしくお願いいたします。
class MasterViewController: UITableViewController {
var detailViewController: DetailViewController? = nil
var objects = [Any]()
var ccClass = custumClass()
private let itemes = ["Sleepy", "Sneezy", "Bashful", "Happy",
"Doc", "Grumpy", "Dopey", "Thorin", "Dorin","Nori", "Ori",
"Balin", "Dwalin", "Fili", "Kili",
"Oin", "Gloin", "Bifur", "Bofur", "Bombur"
]
let simpleTableIdentifier = "Cell"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(insertNewObject(_:)))
self.navigationItem.rightBarButtonItem = addButton
if let split = self.splitViewController {
let controllers = split.viewControllers
self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
}
}
func insertNewObject(_ sender: Any) {
tableView.beginUpdates()
objects.insert(NSDate(), at: 0)
let indexPath = IndexPath(row: 0, section: 0)
self.tableView.insertRows(at: [indexPath], with: .automatic)
tableView.endUpdates()
}
・・・略・・・
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell
= tableView.dequeueReusableCell(withIdentifier: simpleTableIdentifier,
for: indexPath) as UITableViewCell
cell.textLabel?.text = itemes[indexPath.row]
return cell
}
・・・略・・・
}