gpt4 book ai didi

iOS Swift - 加载自定义表格单元格

转载 作者:行者123 更新时间:2023-11-28 05:32:02 25 4
gpt4 key购买 nike

在单个 UIViewController 中显示多个表格的最有效方法是什么?在任何给定时间只有一个可见,并且用户操纵 segmentedControl 来切换当前可见的内容。我能够使用 3 个 tableView 来完成它,但它看起来很乱。这是我的相关代码:

// 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 个 TableView 的想法。只制作 1 个 TableView 并更改数据源,为所选段进行切换怎么样。例如,在您的节数和节的行数和 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
}

并且当段控件改变时重新加载数据源

关于iOS Swift - 加载自定义表格单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27575816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com