Swift TableView Ayarları Rehberi

Yönetici
Swift'te UITableView, iOS uygulamalarında listeleme ve veri gösterimi için en yaygın kullanılan bileşenlerden biridir. Bu rehberde, UITableView’un temel ayarlarını, özelleştirme seçeneklerini ve pratik kullanım örneklerini ele alacağız. Ayrıca, sıkça sorulan sorular (FAQs) bölümüyle konuyu daha iyi anlamanızı sağlayacağız.

UITableView Nedir?​

UITableView, verileri satır ve sütun formatında (genellikle tek sütun) gösteren bir iOS bileşenidir. Kullanıcılar bu listelerde kaydırma yapabilir, hücreleri seçebilir veya düzenleyebilir. UITableView’u kullanmak için genellikle UIViewController içinde bir tablo görünümü oluşturur ve veri kaynağı (dataSource) ile temsilci (delegate) ayarlarını yaparsınız.

Temel TableView Kurulumu​

Aşağıda, Swift’te bir UITableView’un temel kurulumunu gösteren bir örnek verilmiştir:

Kod:
import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    // TableView tanımlama
    let tableView = UITableView()
    let veriListesi = ["Elma", "Armut", "Muz", "Çilek"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // TableView ayarları
        tableView.frame = view.bounds
        tableView.dataSource = self
        tableView.delegate = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Hücre")
        view.addSubview(tableView)
    }
    
    // MARK: - UITableViewDataSource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return veriListesi.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Hücre", for: indexPath)
        cell.textLabel?.text = veriListesi[indexPath.row]
        return cell
    }
    
    // MARK: - UITableViewDelegate
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("\(veriListesi[indexPath.row]) seçildi!")
        tableView.deselectRow(at: indexPath, animated: true)
    }
}

Bu kodda:
  • UITableView programatik olarak oluşturulur ve ekrana eklenir.
  • UITableViewDataSource protokolü ile veri sağlanır (numberOfRowsInSection, cellForRowAt).
  • UITableViewDelegate protokolü ile kullanıcı etkileşimleri yönetilir (didSelectRowAt).

Önemli TableView Ayarları​

UITableView’un işlevselliğini ve görünümünü özelleştirmek için aşağıdaki ayarları kullanabilirsiniz:

1. Hücre Özelleştirme​

Varsayılan UITableViewCell yerine özel bir hücre tasarlayabilirsiniz. Özel hücre için:

Kod:
class OzelHücre: UITableViewCell {
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        setupUI()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setupUI() {
        // Özel UI elemanları ekleme
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        contentView.addSubview(label)
        NSLayoutConstraint.activate([
            label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16),
            label.centerYAnchor.constraint(equalTo: contentView.centerYAnchor)
        ])
    }
}
Kayıt için: tableView.register(OzelHücre.self, forCellReuseIdentifier: "OzelHücre").

2. Bölüm (Section) Ayarları​

Birden fazla bölüm oluşturmak için:

Kod:
func numberOfSections(in tableView: UITableView) -> Int {
    return 2 // Örneğin 2 bölüm
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return section == 0 ? "Meyveler" : "Sebzeler"
}

3. Hücre Yüksekliği​

Hücre yüksekliğini sabit veya dinamik olarak ayarlayabilirsiniz:

Kod:
tableView.rowHeight = 60 // Sabit yükseklik
// veya
tableView.estimatedRowHeight = 60
tableView.rowHeight = UITableView.automaticDimension // Dinamik yükseklik

4. Ayırıcı (Separator) Ayarları​

Ayırıcı çizgileri özelleştirmek için:

Kod:
tableView.separatorStyle = .singleLine
tableView.separatorColor = .gray
tableView.separatorInset = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16)

5. Kaydırma ve Görünüm Ayarları​

  • tableView.alwaysBounceVertical = false // Gereksiz sıçramayı kapatır.
  • tableView.backgroundColor = .lightGray // Arka plan rengi.
  • tableView.tableFooterView = UIView() // Boş hücreleri gizler.

Pratik Örnek: Dinamik Veri ile TableView​

Aşağıda, bir veri modeli ile dinamik bir UITableView örneği verilmiştir:

Kod:
struct Urun {
    let isim: String
    let fiyat: Double
}

class UrunViewController: UIViewController, UITableViewDataSource {
    let tableView = UITableView()
    let urunler = [
        Urun(isim: "Telefon", fiyat: 999.99),
        Urun(isim: "Kulaklık", fiyat: 49.99),
        Urun(isim: "Tablet", fiyat: 599.99)
    ]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.frame = view.bounds
        tableView.dataSource = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UrunHücre")
        view.addSubview(tableView)
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return urunler.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "UrunHücre", for: indexPath)
        let urun = urunler[indexPath.row]
        cell.textLabel?.text = "\(urun.isim) - $\(urun.fiyat)"
        return cell
    }
}

Bu örnekte, bir ürün listesi dinamik olarak gösterilir.

FAQs​

1. TableView’da hücre yeniden kullanım (cell reuse) neden önemlidir?

Hücre yeniden kullanımı, bellek yönetimini optimize eder. dequeueReusableCell metodu, görünmeyen hücreleri yeniden kullanarak yeni hücre oluşturma maliyetini azaltır.

2. Özel hücreyi Storyboard ile nasıl oluştururum?

Storyboard’da bir UITableViewCell prototipi oluşturun, bir reuseIdentifier atayın ve özel bir sınıf bağlayın. Ardından, tableView.dequeueReusableCell ile bu hücreyi çağırın.

3. TableView’da dinamik yükseklik nasıl ayarlanır?

tableView.rowHeight = UITableView.automaticDimension ve tableView.estimatedRowHeight ayarlarını kullanın. Hücre içindeki elemanların Auto Layout kısıtlamaları doğru yapılandırılmalıdır.

4. TableView’da kaydırma performansını nasıl artırırım?
  • Hücre yeniden kullanımını doğru uygulayın.
  • Görsel efektleri (gölge, şeffaflık) minimumda tutun.
  • Veri kaynağını önceden hazırlayın ve asenkron yükleme kullanın.
5. Birden fazla TableView’u aynı ViewController’da kullanabilir miyim?

Evet, her UITableView için ayrı bir reuseIdentifier ve veri kaynağı/delegate atayın. tag özelliği ile TableView’ları ayırt edebilirsiniz.

Sonuç​

Swift’te UITableView, hem basit hem de karmaşık veri listeleme ihtiyaçlarını karşılayabilen esnek bir bileşendir. Temel ayarlarla başlayarak hücre özelleştirme, bölüm yönetimi ve performans optimizasyonu gibi ileri düzey özelliklere geçiş yapabilirsiniz. Bu rehberdeki örnekleri kullanarak kendi TableView’larınızı oluşturabilir ve iOS uygulamalarınızı daha kullanıcı dostu hale getirebilirsiniz!
 
Üst