Reputation: 45
I want my swift code to delete the tableview cell from the button inside the cell. If the user hits the delete button from the cell with the label containing 2 it should delete that cell. So you would see the cells of 0,1,3,4. The delete button should not delete the cell that is at the bottom of the cell. Each delete bottom should only delete that cell. I think you would create a specific function in class view controller to do this.
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var numberOfRows = 5
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { numberOfRows }
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 118 }
var tableView = UITableView()
var selectedIndexPath = IndexPath(row: 0, section: 0)
override func viewDidLoad() {
super.viewDidLoad()
setTableVIew()
}
func setTableVIew(){
let VCframe = view.frame
let height = VCframe.height * 0.8
let widthx = VCframe.width
tableView.frame = CGRect(x: 10, y: 0, width: widthx - 20, height: height)
tableView.delegate = self
tableView.dataSource = self
view.addSubview(tableView)
tableView.register(customtv.self, forCellReuseIdentifier: "cell")
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! customtv
//cell.textLabel?.text = "\(indexPath.row)" // Don't Do this.
cell.lbl.text = "\(indexPath.row)" // Do this.
return cell
}
}
class customtv: UITableViewCell {
lazy var backView : UIView = {
let view = UIView(frame: CGRect(x: 10, y: 6, width: self.frame.width , height: 110))
view.backgroundColor = .green
print(self.frame.width)
return view
}()
override func layoutSubviews() {
backView.clipsToBounds = true
backView.frame = CGRect(x: 0, y: 6, width: bounds.maxX , height: 110)
}
lazy var lbl : UILabel = {
let press = UILabel(frame: CGRect(x: 0, y: 3, width: 120 , height: 50))
press.backgroundColor = .yellow
press.text = String("1")
return press
}()
lazy var deleteBTN : UIButton = {
let press = UIButton(frame: CGRect(x: 200, y: 3, width: 65 , height: 50))
press.backgroundColor = .systemBlue
press.setTitle("DELETE", for: .normal)
return press
}()
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(animated, animated: true)
addSubview(backView)
backView.addSubview(deleteBTN)
backView.addSubview(lbl)
}
}
Upvotes: 0
Views: 2901
Reputation: 100503
Instead of
var numberOfRows = 5
use an array
var arr = [0,1,2,3,4]
Then
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arr.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! customtv
cell.lbl.text = "\(arr[indexPath.row])"
cell.deleteBTN.tag = indexPath.row
cell.deleteBTN.addTarget(self, action:#selector(delete(_:)), for: .touchUpInside)
return cell
}
@objc func handleRegister(_ sender: UIButton){
arr.remove(at:sender.tag)
tableView.deleteRows(at:[Indexpath(row:sender.tag,section:0)],with:.none)
}
Upvotes: 1