tableview 如何追加到空数组选中的单元格?
tableview how to append to empty array checked cells?
class Cell: UITableViewCell {
@IBOutlet weak var checkBtn : UIButton!
@IBAction func selectButton(_ sender: UIButton) {
if checkBtn.isSelected == false {
checkBtn.isSelected = true
} else {
checkBtn.isSelected = false
}
}
}
我有一个单元格class。但是 IBACtion 不起作用。
我也做了一个ViewController如下
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "exampleCell") as! Cell
if cell.checkBtn.isSelected == true {
anEmptyArray.append(myTableViewData[indexPath.row])
} else {
}
}
如何获取选定的单元格?
您可以使用下面的table视图委托方法,下面是代码。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
anEmptyArray.append(myTableViewData[indexPath.row])
}
还要确保您的 viewDidLoad
方法中有以下代码行。
tableView.delegate = self
使用这种方法,您只需 select 单元格。就这些了。
另一种方法
您需要创建新的委托。
protocol TableViewCellDelegate: AnyObject {
func didSelect(cell: YourTableViewCell) // Don't need to define just declare.
}
现在在 UITableViewCell
class 中创建一个委托实例,并在按钮操作中调用方法。
class Cell: UITableViewCell {
@IBOutlet weak var checkBtn : UIButton!
weak var delegate: TableViewCellDelegate? // Instance of Delegate protocol
@IBAction func selectButton(_ sender: UIButton) {
if checkBtn.isSelected == false {
checkBtn.isSelected = true
} else {
checkBtn.isSelected = false
}
self.delegate?.didSelect(cell: self) // triggering the delegate method.
}
}
现在哪个代码会被触发?我们需要定义它。转到您的 UITableViewController,并扩展 class,例如
extension YourTableViewController: TableViewCellDelegate {
func didSelect(cell: YourTableViewCell) {
// Now you have the cell, and you can get the indexPath of this cell
if let indexPath = tableView.indexPath(for: cell) {
// Now you have indexPath and you know the drill.
// If you want to remove that cell delete that value from array and reload tableView.
myTableViewData.remove(at: indexPath.row)
tableView.reloadData()
}
}
}
不要忘记像下面这样制作 YourTableViewController 的单元格委托。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "exampleCell") as! YourTableViewCell
cell.delegate = self
}
class Cell: UITableViewCell {
@IBOutlet weak var checkBtn : UIButton!
@IBAction func selectButton(_ sender: UIButton) {
if checkBtn.isSelected == false {
checkBtn.isSelected = true
} else {
checkBtn.isSelected = false
}
}
}
我有一个单元格class。但是 IBACtion 不起作用。
我也做了一个ViewController如下
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "exampleCell") as! Cell
if cell.checkBtn.isSelected == true {
anEmptyArray.append(myTableViewData[indexPath.row])
} else {
}
}
如何获取选定的单元格?
您可以使用下面的table视图委托方法,下面是代码。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
anEmptyArray.append(myTableViewData[indexPath.row])
}
还要确保您的 viewDidLoad
方法中有以下代码行。
tableView.delegate = self
使用这种方法,您只需 select 单元格。就这些了。
另一种方法
您需要创建新的委托。
protocol TableViewCellDelegate: AnyObject {
func didSelect(cell: YourTableViewCell) // Don't need to define just declare.
}
现在在 UITableViewCell
class 中创建一个委托实例,并在按钮操作中调用方法。
class Cell: UITableViewCell {
@IBOutlet weak var checkBtn : UIButton!
weak var delegate: TableViewCellDelegate? // Instance of Delegate protocol
@IBAction func selectButton(_ sender: UIButton) {
if checkBtn.isSelected == false {
checkBtn.isSelected = true
} else {
checkBtn.isSelected = false
}
self.delegate?.didSelect(cell: self) // triggering the delegate method.
}
}
现在哪个代码会被触发?我们需要定义它。转到您的 UITableViewController,并扩展 class,例如
extension YourTableViewController: TableViewCellDelegate {
func didSelect(cell: YourTableViewCell) {
// Now you have the cell, and you can get the indexPath of this cell
if let indexPath = tableView.indexPath(for: cell) {
// Now you have indexPath and you know the drill.
// If you want to remove that cell delete that value from array and reload tableView.
myTableViewData.remove(at: indexPath.row)
tableView.reloadData()
}
}
}
不要忘记像下面这样制作 YourTableViewController 的单元格委托。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "exampleCell") as! YourTableViewCell
cell.delegate = self
}