【发布时间】:2016-04-11 18:24:47
【问题描述】:
我有以下问题: 我正在制作一个类似于 Pokédex 的应用程序,它在第一个选项卡上显示所有 721 个神奇宝贝的列表,在第二个选项卡上显示另一个列表,其中包含我最喜欢的神奇宝贝。本质上,有两个相同的 ViewController 连接到我的 TabBar。
那么问题来了: 第一个(和初始)选项卡上的 TableView 工作正常。但是,当我在第二个选项卡上加载 TableView 时,神奇宝贝已加载,但未显示。 我可以单击 TableViewCell 并转到详细信息页面,但 TableViewCell 中的标签没有显示任何内容。
这是我用来加载收藏夹表视图的代码
class FavoritesViewController: BaseViewController,
UITableViewDataSource, UITableViewDelegate {
@IBOutlet var FavoritesListView: UITableView!
var pokemonList: [String] = ["Nothing Here!"]
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("FavoriteCell", forIndexPath: indexPath) as! FavoriteCell
var name = pokemonList[indexPath.row]
capitalizeFirstLetter(&name)
cell.nameLabel.text = name
return cell;
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return pokemonList.count
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print(pokemonList[indexPath.row])
self.performSegueWithIdentifier("ToPokemonDetail", sender: pokemonList[indexPath.row])
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "ToPokemonDetail"){
let destination = segue.destinationViewController as! PokemonDetailViewController
let thisPokemon = sender as! String
destination.currentPokemon = thisPokemon
}
}
override func viewWillAppear(animated: Bool) {
FavoritesListView.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
// Fetch the cached list, getNames returns an array of strings
let list = utility.getNames("Favorites")
pokemonList = list
}
委托和数据源通过情节提要设置。
上面的代码可以正常工作,并且可以很好地显示收藏夹列表。完整图鉴的类具有类似的结构。
我尝试切换收藏夹和 Pokédex,以便在启动时显示完整的 Pokémon 列表。所有 721 只神奇宝贝都正确显示,但收藏夹不可见。
我还尝试了什么:
- 反复检查重用标识符
- 应正确绑定引用出口
- 在 viewDidAppear 方法中调用 TableView.reloadData()
- 切换标签项
有人知道这里到底发生了什么吗? 有更多问题欢迎提问
编辑:当我交换两个 TabBar 按钮时会发生这种情况,没有代码更改
【问题讨论】:
-
IndexPath 处的行单元格是否被调用或代表是否已连接?
-
你能展示一下这背后的代码吗?
-
您从何时何地获取您的收藏夹?它应该在重新加载表之前获取数据。
-
我已经更新了我的问题,添加了 TableViews 后面的代码
-
在 cellForRowAtIndexPath 中,检查 'var name' 值
标签: ios swift uitableview uitabbar