我有一個UIViewController
。它有一個容器視圖,其中嵌入了一個UITableViewController
。在嵌入式視圖控制器中執行功能
表視圖顯示20個數字的陣列。點擊刪除按鈕顯示一個操作表,它提供了2個選項來修改上述數組。
我有內部UITableViewController
兩個函數來修改該數組。
class TableViewController: UITableViewController {
fileprivate var values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
override func viewDidLoad() {
super.viewDidLoad()
}
func deleteFirstTen() {
values.removeSubrange(values.startIndex..<values.startIndex.advanced(by: 10))
tableView.reloadData()
}
func deleteLastTen() {
values.removeSubrange(values.startIndex.advanced(by: 10)..<values.endIndex)
tableView.reloadData()
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return values.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = "\(values[indexPath.row])"
return cell
}
}
我初始化視圖控制器並從UIViewController
調用這些函數,但它沒有做任何事情。
class ViewController: UIViewController {
@IBAction func didTapDeleteButton(_ sender: UIBarButtonItem) {
let tableViewController = storyboard?.instantiateViewController(withIdentifier: "TableViewController") as! TableViewController
let sheet = UIAlertController(title: nil, message: "Do You Want to Delete...", preferredStyle: .actionSheet)
sheet.addAction(UIAlertAction(title: "1 - 10", style: .default) { action in
tableViewController.deleteFirstTen()
})
sheet.addAction(UIAlertAction(title: "11 - 20", style: .default) { action in
tableViewController.deleteLastTen()
})
sheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
present(sheet, animated: true, completion: nil)
}
}
如何正確調用嵌入式視圖控制器中的函數?
Demo project uploaded here。
是否真的有必要嵌入UITableViewController?爲什麼你不簡單地在你的ViewController上添加UITableView和他的委託? –
@GiuseppeSapienza這是我的實際需求的簡化版本。在真正的應用程序中,我必須在同一個視圖控制器中顯示錶視圖和集合視圖。所以我必須使用容器視圖。 – Isuru
如果您不需要使用參數調用函數,那麼您可以使用'NotificationCenter'並在您的tableviewcontroller內部添加一個觀察器,然後在您的viewcontroller中嵌入該視圖控制器將其發佈到您每次觀察的名稱didTapDeleteButton被調用。否則,如果您確實需要傳遞參數,我會在您的viewcontroller中存儲一個引用tableviewcontroller內部方法的閉包,並在需要時調用該閉包。 – TNguyen