[英]iOS Swift - Loading custom table cells
在單個UIViewController中顯示多個表的最有效方法是什么? 在任何給定時間只有一個可見,並且用戶操縱segmentedControl切換當前可見的內容。 我能夠使用3個tableViews來完成它,但是看起來很混亂。 這是我的相關代碼:
// Main UIViewController for handling 3 tableViews
class AnimalViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let dogs = ["English Bulldog", "Labrador Retriever"]
let cats = ["Persian", "Siamese"]
let rabbits = ["Lionhead", "Rex"]
@IBOutlet weak var segmentedControl: UISegmentedControl!
@IBOutlet weak var dogsTableView: UITableView!
@IBOutlet weak var catsTableView: UITableView!
@IBOutlet weak var rabbitsTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.dogsTableView.hidden = false
self.catsTableView.hidden = true
self.rabbitsTableView.hidden = true
}
@IBAction func indexChanged(sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
self.dogsTableView.hidden = false
self.catsTableView.hidden = true
self.rabbitsTableView.hidden = true
case 1:
self.dogsTableView.hidden = true
self.catsTableView.hidden = false
self.rabbitsTableView.hidden = true
case 2:
self.dogsTableView.hidden = true
self.catsTableView.hidden = true
self.rabbitsTableView.hidden = false
default:
break;
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var count: Int = 0
if (tableView == self.dogsTableView) {
println("dogs count")
count = self.dogs.count
}
else if (tableView == self.catsTableView) {
println("cats count")
count = self.cats.count
}
else if (tableView == self.rabbitsTableView) {
println("rabbits count")
count = self.rabbits.count
}
return count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: UITableViewCell!
if (tableView == self.dogsTableView) {
println("dogs count")
var cell = self.dogsTableView.dequeueReusableCellWithIdentifier("cell") as? DogTableViewCell
if (cell == nil) {
let nib = NSBundle.mainBundle().loadNibNamed("DogTableViewCell", owner: DogTableViewCell.self, options: nil) as NSArray
cell = nib.objectAtIndex(0) as? DogTableViewCell
}
cell?.loadDog(breed: self.dogs[indexPath.row])
return cell!
}
else if (tableView == self.catsTableView) {
println("cats count")
var cell = self.catsTableView.dequeueReusableCellWithIdentifier("cell") as? CatTableViewCell
if (cell == nil) {
let nib = NSBundle.mainBundle().loadNibNamed("CatTableViewCell", owner: CatTableViewCell.self, options: nil) as NSArray
cell = nib.objectAtIndex(0) as? CatTableViewCell
}
cell?.loadCat(breed: self.cats[indexPath.row])
return cell!
}
else if (tableView == self.rabbitsTableView) {
println("rabbits count")
var cell = self.rabbitsTableView.dequeueReusableCellWithIdentifier("cell") as? RabbitTableViewCell
if (cell == nil) {
let nib = NSBundle.mainBundle().loadNibNamed("RabbitTableViewCell", owner: RabbitTableViewCell.self, options: nil) as NSArray
cell = nib.objectAtIndex(0) as? RabbitTableViewCell
}
cell?.loadRabbit(breed: self.rabbits[indexPath.row])
return cell!
}
else {
return cell!
}
}
}
// Dog, Cat, and Rabbit Table View Cell files (essentially the same, see Dog is shown below)
class DogTableViewCell: UITableViewCell {
@IBOutlet weak var titleLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
func loadDog(#breed: String) {
self.titleLabel.text = breed
}
}
這可能更有效,但是您只是放棄了擁有3個表視圖的想法。 僅制作1個表視圖並更改數據源,然后為所選段進行切換,該如何操作。 例如,在您的節數和節數以及cellForRowAtIndexPath方法的行數中:
switch segmentControl.selectedIndex {
case 0:
// data source for index 0
case 1:
// data source for index 1
case 2:
// data source for index 2
default:
break
}
並且當段控件更改時,重新加載數據源
如果可能的話,只需使用NSFetchedResultsController在UITableView部分中分割動物即可。
看一下這個問題:快速使用NSFetchedResultsController創建節
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.