Advertisement
Don_Mag

Basic table with insert/delete/refresh

Jun 20th, 2024
795
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 3.56 KB | None | 0 0
  1. class MyCell: UITableViewCell {
  2.    
  3.     static let identifier: String = "MyCell"
  4.    
  5.     let label = UILabel()
  6.    
  7.     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  8.         super.init(style: style, reuseIdentifier: reuseIdentifier)
  9.         commonInit()
  10.     }
  11.     required init?(coder: NSCoder) {
  12.         super.init(coder: coder)
  13.         commonInit()
  14.     }
  15.     private func commonInit() {
  16.         label.translatesAutoresizingMaskIntoConstraints = false
  17.         contentView.addSubview(label)
  18.         let g = contentView.layoutMarginsGuide
  19.        
  20.         let b = label.bottomAnchor.constraint(equalTo: g.bottomAnchor)
  21.         b.priority = .required - 1
  22.  
  23.         NSLayoutConstraint.activate([
  24.             label.topAnchor.constraint(equalTo: g.topAnchor),
  25.             label.leadingAnchor.constraint(equalTo: g.leadingAnchor),
  26.             label.trailingAnchor.constraint(equalTo: g.trailingAnchor),
  27.             label.heightAnchor.constraint(equalToConstant: 60.0),
  28.             b,
  29.         ])
  30.        
  31.         label.font = .systemFont(ofSize: 16.0, weight: .regular)
  32.     }
  33.    
  34. }
  35.  
  36. class AddRemoveTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
  37.  
  38.     var myData: [String] = []
  39.     var myCounter: Int = 15
  40.    
  41.     let tableView = UITableView()
  42.    
  43.     override func viewDidLoad() {
  44.         super.viewDidLoad()
  45.  
  46.         tableView.translatesAutoresizingMaskIntoConstraints = false
  47.         view.addSubview(tableView)
  48.        
  49.         let g = view.safeAreaLayoutGuide
  50.         NSLayoutConstraint.activate([
  51.             tableView.topAnchor.constraint(equalTo: g.topAnchor),
  52.             tableView.leadingAnchor.constraint(equalTo: g.leadingAnchor),
  53.             tableView.trailingAnchor.constraint(equalTo: g.trailingAnchor),
  54.             tableView.bottomAnchor.constraint(equalTo: g.bottomAnchor),
  55.         ])
  56.        
  57.         myData = (1...myCounter).compactMap( { "Data Item \($0)" } )
  58.        
  59.         navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Insert", style: .plain, target: self, action: #selector(addTapped(_:)))
  60.        
  61.         tableView.register(MyCell.self, forCellReuseIdentifier: MyCell.identifier)
  62.         tableView.dataSource = self
  63.         tableView.delegate = self
  64.        
  65.         let hv = UILabel()
  66.         hv.backgroundColor = .yellow
  67.         hv.text = "Header View"
  68.         hv.frame.size.height = 40.0
  69.         tableView.tableHeaderView = hv
  70.        
  71.         tableView.refreshControl = UIRefreshControl()
  72.         tableView.refreshControl?.addTarget(self, action: #selector(refresh(_:)), for: .valueChanged)
  73.        
  74.         view.backgroundColor = .red
  75.         tableView.backgroundColor = .clear
  76.     }
  77.    
  78.     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  79.         return myData.count
  80.     }
  81.     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  82.         let c = tableView.dequeueReusableCell(withIdentifier: MyCell.identifier, for: indexPath) as! MyCell
  83.         c.label.text = myData[indexPath.row]
  84.         return c
  85.     }
  86.    
  87.     @objc func addTapped(_ sender: Any?) {
  88.         myCounter += 1
  89.         myData.insert("Inserted Data \(myCounter)", at: 3)
  90.         tableView.insertRows(at: [IndexPath(row: 3, section: 0)], with: .automatic)
  91.     }
  92.     @objc func refresh(_ sender: UIRefreshControl) {
  93.         DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
  94.             sender.endRefreshing()
  95.         })
  96.     }
  97.     func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
  98.         if editingStyle == .delete {
  99.             myData.remove(at: indexPath.row)
  100.             tableView.deleteRows(at: [indexPath], with: .fade)
  101.         }
  102.     }
  103.    
  104.     func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
  105.         return true
  106.     }
  107.    
  108.     func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
  109.         return .delete
  110.     }
  111.    
  112. }
  113.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement