gpt4 book ai didi

ios - 用于 2 个 TableViews/Segmented Control Swift 的自定义单元格

转载 作者:行者123 更新时间:2023-11-28 09:02:34 24 4
gpt4 key购买 nike

所以我有一个分段控件,它在 MainVC 中的 2 个 TableView 和 1 个 MapView 之间切换。

我可以通过添加一个 IBAction func changedInSegmentedControl 来切换模拟器中的 View ,以切换隐藏的 View ,同时其中一个 View 处于事件状态。

我使用 XIB 创建了 2 个自定义 TableViewCell。我还为每个 TableView 添加了标签。

我的问题是如何将它们添加到 cellForRowAtIndexPath 中?

目前,我的代码是:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
// var cell: UITableViewCell
if (tableView.tag == 1) {
cell: CardTableViewCell = tableView.dequeueReusableCellWithIdentifier("CardCell") as! CardTableViewCell
return cell
}
else if (tableView.tag == 2) {
cell: ListTableViewCell = tableView.dequeueReusableCellWithIdentifier("ListCell") as! ListTableViewCell
return cell
}
}

当然,Swift 需要 If 语句之外的函数的“返回单元格”。我尝试在外部使用 var cell: UITableViewCell,但在完成 dequeuReusableCellWithIdentifier 时遇到了麻烦。

有人知道如何做到这一点吗?谢谢。

最佳答案

这就是我处理它的方式(iOS 10 上的 Swift 3.0)。我制作了一个带有两个自定义单元格的 tableView(每个单元格都是它们自己的子类)。分段控件在我的 navigationBar 上,有两个部分:People 和 Places。

我的类中有两个数组(人和地点),它们是两个 TableView 的数据源。附加到 segmentedControl 的操作触发表的重新加载,cellForRowAtIndex 中的 switch 语句控制从哪个单元格加载数组。

我通过 API 调用将数据加载到两个数据数组中,异步完成会触发 dataLoaded(),从而重新加载 tableView。同样,我不必担心重新加载表时选择了哪个段:cellForRowAtIndex 负责加载正确的数据。我像 UITableViewCell 一样初始化一个基本单元格,然后在我创建和配置自定义单元格的 case 语句中。然后我在最后返回我的自定义类型单元格,只要 cellForRowAtIndex 中的 reuseIdentifiers 和类是正确的,正确的单元格就会被初始化并显示在 tableView 中。

@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var peoplePlacesControl: UISegmentedControl!

fileprivate var placesArray: [PlaceModel]?
fileprivate var usersArray: [UserModel]?


@IBAction func segmentedControlActionChanged(_ sender: AnyObject) {
tableView.reloadData()
switch segmentedControl.selectedSegmentIndex {
case 0:
loadUsersfromAPI()
case 1:
loadPlacesFromAPI()
default:
// shouldnt get here
return
}
}


func dataLoaded() {
switch peoplePlacesControl.selectedSegmentIndex {
case 0: // users
if favoriteUsersArray == nil {
self.tableView.reloadData()
} else {
hideTableViewWhileEmpty()
}
case 1: // places
if placesArray != nil {
self.tableView.reloadData()
} else {
hideTableViewWhileEmpty()
}
default:
return
}
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

switch segmentedControl.selectedSegmentIndex {
case 0:
if usersArray != nil {
return usersArray!.count
} else {
return 0
}
case 1: // places
if placesArray != nil {
return placesArray!.count
} else {
return 0
}
default:
return 0
}
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

var cell = UITableViewCell()
switch peoplePlacesControl.selectedSegmentIndex {
case 0: // people
let userCell = tableView.dequeueReusableCell(withIdentifier: "MyUserCell", for: indexPath) as! MyUserTableViewCell
if usersArray != nil && indexPath.row < usersArray!.count {
let user = usersArray![indexPath.row]
userCell.configure(user)
userCell.myDelegate = self
}
cell = userCell as MyUserTableViewCell

case 1: // places
let placeCell = tableView.dequeueReusableCell(withIdentifier: "MyPlaceCell", for: indexPath) as! MyPlaceTableViewCell

if favoritePlacesArray != nil && indexPath.row < favoritePlacesArray!.count {
let place = placesArray![indexPath.row]
placeCell.configure(place)
placeCell.myDelegate = self
}
cell = placeCell as MyPlaceTableViewCell

default:
break
}
return cell
}

关于ios - 用于 2 个 TableViews/Segmented Control Swift 的自定义单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657175/

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