Orhak
Administrator
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.
Bu kodda:
Bu örnekte, bir ürün listesi dinamik olarak gösterilir.
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?
Evet, her UITableView için ayrı bir reuseIdentifier ve veri kaynağı/delegate atayın. tag özelliği ile TableView’ları ayırt edebilirsiniz.
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.
Evet, her UITableView için ayrı bir reuseIdentifier ve veri kaynağı/delegate atayın. tag özelliği ile TableView’ları ayırt edebilirsiniz.