ios - 通过按下按钮插入表格视图行
问题描述
我创建了一个带有两个控制器的 UITabBarController,因为首先我有一个带有 UIButton 的 ViewController,第二个是 UITableViewController,我如何通过在 ViewController 中按下 btn 在 tableView 中插入新行?是否应该通过自定义委托来完成?有人可以举个例子吗
这是我的代码
import UIKit
class Home: UIViewController {
var delegate: TableViewDelegate?
lazy var addButton : UIButton = {
let button = UIButton(type: .system)
button.setImage(#imageLiteral(resourceName: "plus_photo"), for: .normal)
button.translatesAutoresizingMaskIntoConstraints = false
button.addTarget(self, action: #selector(setupRows), for: .touchUpInside)
return button
}()
@objc func setupRows() {
delegate?.insertingRows()
}
override func viewDidLoad() {
super.viewDidLoad()
delegate = self as? TableViewDelegate
setupRows()
navigationItem.title = "Test"
view.backgroundColor = .white
view.addSubview(addButton)
addButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
addButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
addButton.heightAnchor.constraint(equalToConstant: 150).isActive = true
addButton.widthAnchor.constraint(equalToConstant: 150).isActive = true
}
}
import UIKit
protocol TableViewDelegate {
func insertingRows()
}
class TableViewTest: UITableViewController , TableViewDelegate {
var items = ["abc", "abcd", "abcde"]
let cellid = "cellid"
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(CustomCell.self, forCellReuseIdentifier: cellid)
insertingRows()
}
func insertingRows() {
let indexPath = IndexPath(row: items.count + 1, section: 0)
tableView.insertRows(at: [indexPath], with: .left)
self.tableView.reloadData()
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellid, for: indexPath) as! CustomCell
cell.textLabel?.text = items[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
}
class CustomCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupViews() {
}
}
解决方案
您可以在 Home viewController 中使用tabBar(_:didSelect:)委托方法。
您的家庭 VC:
class Home: UIViewController, UITabBarControllerDelegate {
private var selectedIndex: Int?
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if tabBarController.selectedIndex == 1 {
if let secondViewController = viewController as? TableViewTest, let index = selectedIndex {
secondViewController.insertingRows(index: index)
}
}
}
@objc func setupRows() {
selectedIndex = 3
}
}
您的 TableViewTest TableViewController :
class TableViewTest: UITableViewController {
func insertingRows(index: Int) {
let indexPath = IndexPath(row: index, section: 0)
tableView.beginUpdates()
tableView.insertRows(at: [indexPath], with: .none)
tableView.endUpdates()
}
}
推荐阅读
- c - sizeof(p) 和 sizeof(*p) 之间不同,而 p 具有矩阵的基本类型
- entity-framework - 在 EF Core 中选择分组项目
- javascript - 映射图像数组会导致在每个实例上重复相同的图像
- ruby - 无法在 Ubuntu 20.04 中捆绑更新 --bundler
- python - 如何在 xarray 数据集中使用纬度和经度变量作为维度/坐标?
- python - 如何使用 Python 和 Jupyter 在一行中加载我的数据
- amazon-web-services - AWS 通过 Lambda 上传到 S3
- azure-application-insights - 是否有用于检查功能应用的诊断设置的天蓝色策略将日志发送到日志分析工作区
- javascript - 属性 'form' 没有初始化程序,也没有在构造函数中明确分配
- javascript - 在函数php中调用js函数