Herkese merhaba önceki yazıda custom tableview’dan bahsetmiştik ve satırlara tıkladığımızda basit bir mesaj gösterme işlemi gerçekleştirmiştik, şimdi ise satırı sola kaydırdığımızda bir işlemin tetiklenmesini sağlayacağız. Bunu yapmak için önceki proje üzerine tek bir fonksiyon ekleyerek bunu gerçekleştireceğiz. Bu fonksiyon hemen aşağıdaki fonksiyon.
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { array.remove(at: indexPath.row) //array2.remove(at: indexPath.row) //imageArray.remove(at: indexPath.row) //burada indexpath'i köşeli parantez içine almalıyız mutlaka tableView.deleteRows(at: [indexPath], with: .fade) }
Burada if şartıyla bir silme işlemi yapacağımızı belirtiyoruz tabi ki illa silme işlemi yapmak zorunda değiliz fakat ben silme işlemi yapacağım. Bizim tableview’imiz custom tableview olduğu için, içinde birden fazla dizi barındırıyordu 2 adet text dizisi ve 1 adet resim dizisi silme işlemi yaparken bu satır silineceği için bu dizilerden herhangi birini de silmeliyiz veya hepsini de silebiliriz. Satırdaki dizilerden birini sildikten sonra komple satırıda silmeliyiz tabi görsel olarak onun içinde deleteRows fonksiyonunu kullanıyoruz burada köşeli parantez içinde indexPath’ı yazıyoruz hangi satırın silineceğiniz temsil ediyor, with: .fade olan kısım ise satırın silinme animasyonunu temsil ediyor.
TableView kodunun tamamı
import UIKit class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {//sınıfları implemente ettik var tableView = UITableView()//kullanacağımız tableview var array = ["macbook","ipad","iphone"] var array2 = ["computer","tablet","phone"] var imageArray = [UIImage]() override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = .red imageArray.append(UIImage(named: "macbookImg")!)//ilgili resimler ile image array'i dolduruldu imageArray.append(UIImage(named: "tabletImg")!) imageArray.append(UIImage(named:"iphoneImg" )!) tableView = UITableView(frame: UIScreen.main.bounds)//tableview'in tüm ekranı kaplaması sağlandı tableView.delegate = self //burada bir nevi kalıtım yapıyoruz viewController'ımıza tableview özellikleri veriyoruz tableView.dataSource = self tableView.separatorStyle = .none tableView.register(MenuCell.self, forCellReuseIdentifier: "menuId") //buradaki id kısmı önemli aşağıdaki ile aynı olmalı self.view.addSubview(tableView)//tableView'imizi viewController'imiza ekledik } //bu fonksiyonları ovverride ettirdi bize func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {//tableview'imizin kaç satır olacağı return array.count //elimizdeki dizilerden birinin boyutu kadar olsun dedik } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {//hücre içindeki satırlar dolduruluyor let cell = MenuCell(style: UITableViewCellStyle.default, reuseIdentifier: "menuId") //MenuCell sınıfında hücre şablonumuzu elde ediyoruz cell.l1.text = array[indexPath.row]//array dizimizin içindeki verileri tek tek satırlara yazıyoruz cell.l2.text = array2[indexPath.row]//array2 dizimizin içindeki verileri tek tek satırlara yazıyoruz cell.img.image = imageArray[indexPath.row] //resimleri aktarıyoruz return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { //herhangi bir hücreye tıklanma olayı var alert = UIAlertController(title: "Buraya Tıkladınız", message:array2[indexPath.row] , preferredStyle: UIAlertControllerStyle.alert) alert.addAction(UIAlertAction(title: "Tamam", style:UIAlertActionStyle.default , handler: nil)) self.present(alert,animated: true,completion: nil) } func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {//hücre arka planı let bgImg = UIImage(named: "viewBg") let bgImgView = UIImageView(image: bgImg, highlightedImage: nil) cell.backgroundView = bgImgView } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {//hücrelerin satır yükseklikleri return 100 } // yeni eklenen fonksiyon func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { array.remove(at: indexPath.row) //array2.remove(at: indexPath.row) //imageArray.remove(at: indexPath.row) //burada indexpath'i köşeli parantez içine almalıyız mutlaka tableView.deleteRows(at: [indexPath], with: .fade) } } }
Herkese iyi çalışmalar.