我希望我的swift代码在每次按下按钮时都添加一个新的tableview单元格。你可以在下面的gif中看到我想要的东西。这段代码应该在func-tableView(_tableView:UITableView,cellForRowAt-indexPath:indexPath)中添加按钮-
在此输入图像描述
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
private let myArray: NSArray = ["First"]
var myTableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
myTableView.dataSource = self
myTableView.delegate = self
self.view.addSubview(myTableView)
myTableView.translatesAutoresizingMaskIntoConstraints = false
myTableView.register(MyCell.self, forCellReuseIdentifier: "MyCell")
NSLayoutConstraint.activate([
myTableView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.90),
myTableView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1),
myTableView.topAnchor.constraint(equalTo: view.topAnchor),
myTableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
])
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Num: \(indexPath.row)")
print("Value: \(myArray[indexPath.row])")
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyCell
cell.buttonTapCallback = {
}
return cell
}
}
class MyCell: UITableViewCell {
var buttonTapCallback: () -> () = { }
let button: UIButton = {
let btn = UIButton()
btn.setTitle("Button", for: .normal)
btn.backgroundColor = .systemPink
btn.titleLabel?.font = UIFont.systemFont(ofSize: 14)
return btn
}()
let label: UILabel = {
let lbl = UILabel()
lbl.font = UIFont.systemFont(ofSize: 16)
lbl.textColor = .systemPink
return lbl
}()
@objc func didTapButton() {
buttonTapCallback()
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
//Add button
contentView.addSubview(button)
button.addTarget(self, action: #selector(didTapButton), for: .touchUpInside)
//Set constraints as per your requirements
button.translatesAutoresizingMaskIntoConstraints = false
button.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 20).isActive = true
button.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10).isActive = true
button.widthAnchor.constraint(equalToConstant: 100).isActive = true
button.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -10).isActive = true
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
您可能没有真正添加一个要显示的新项目
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyCell
cell.buttonTapCallback = { [weak self] in
guard let self = self else { return }
self.myArray.append("NewItem")
self.myTableView.reloadData()
}
return cell
}
在 tableView(_: 单元格用于生成:)
中,您需要使用 MyCell 的
init(样式:重用标识符:)
而不是取消排队可重用单元格(带标识符:for:)
创建单元格,即
let cell = MyCell(style: .default, reuseIdentifier: "MyCell")
接下来,在buttonTapCallback
closure
中,您需要向
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = MyCell(style: .default, reuseIdentifier: "MyCell")
cell.buttonTapCallback = {[weak self] in
self?.myArray.append("NewCell-\(indexPath.row)")
self?.myTableView.reloadData()
}
return cell
}
注意:使用Swift而不是Objective-C类型时使用Swift类型。在代码中使用[String]
而不是NSArray
。
提前谢谢。
问题内容: 我正在尝试为在表格视图单元格中按下的按钮运行一个动作。下面的代码在我的表视图控制器类中。 在我的UITableViewCell类的称为requestCell的插座中,该按钮已被描述为“是”。 我正在使用“解析”来保存数据,并且想在按下按钮时更新对象。我的objectIds数组可以正常工作,cell.yes.tag还会在日志中输出正确的数字,但是,为了正常运行查询,我无法将该数字输入“连
我有一个带有表视图的Xib(我使用的是Xib而不是常规的故事板,因为我将Xib插入到UIPageView控制器中)。在 Xib 的类中,我注册了一个自定义表视图单元格。尽管单元格插入到表视图中,但它不会根据其约束正确调整大小,也不会更改表视图的显示。 这是我在视图控制器中的设置代码,它具有表视图xib:类 当我运行应用程序时,它看起来像这样: 所以基本上,自定义单元格是从xib文件添加到表格视图中
问题内容: 我试图让表单元格在创建新行时显示字符串。但是所有行都是空的。有人知道我在做什么错吗?这是主要的类:包应用程序; 这是正常的并且可以正常工作,所以我认为您不必为此担心。 这是控制器类。我认为问题可能出在哪里。 这也是tableviewer所需的表类 你们知道什么地方可能出错,或者建议我如何只添加tableviewer,使其代码仍可与SceneBuilder中的其余fxml文件一起使用?
问题内容: 我已经在Google和Stackoverflow上进行了搜索,但没有得到给出的示例。有人可以向我解释一下。 我想在表视图的最后一列中添加一个按钮,当单击它时,它应该触发一个侦听器并传递按钮行的对象。我只是没有从 gist.github.com 得到以下示例: 这是我目前的完整代码: 现在我必须创建的部分是可以理解的。但是如何将其分配给列? 我了解这一点: 但这不是: 问题答案: 为了能
我在细胞上有两个标签。如果标签只显示一行文本,那么单元格看起来很好。但是如果有更多的文本,并且如果标签上的行被包裹起来,那么标签/文本就会离开单元格。附加图像。 我当前的代码: 解决方案我试图修复它: 这就是解决方案的外观。如何根据单元格的内容更新单元格的高度?