Swift TableView Swipe İşlemi

0
Swift TableView Swipe İşlemi

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.

LEAVE A REPLY