我有一个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