UITableViewCells 未出现在第二个选项卡中

Posted

技术标签:

【中文标题】UITableViewCells 未出现在第二个选项卡中【英文标题】:UITableViewCells not appearing in second Tab 【发布时间】: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 按钮时会发生这种情况,没有代码更改

Pokédex Screen Favorites Screen

GitHub Project Here

【问题讨论】:

IndexPath 处的行单元格是否被调用或代表是否已连接? 你能展示一下这背后的代码吗? 您从何时何地获取您的收藏夹?它应该在重新加载表之前获取数据。 我已经更新了我的问题,添加了 TableViews 后面的代码 在 cellForRowAtIndexPath 中,检查 'var name' 值 【参考方案1】:

问题出在情节提要单元标签框架中。为 (Any,Any) Size Class 设置视图控制器的约束。如果你能给我在你的 git 上的写权限,我可以在 github 上提交代码。谢谢

【讨论】:

【参考方案2】:

也许您的表的委托和数据源没有设置。

table.delegate = self
table.dataSource = self

当然这是在你将属性添加到视图控制器之后

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 

【讨论】:

委托和数据源是通过情节提要设置的。请看看我更新的问题。我在其中一个 TableViewControllers 后面添加了代码 抱歉。我会留下我的答案,以防它帮助其他人。【参考方案3】:

对于该控制器,您的行数始终为 0, 我查看了您的代码 pokemonList 计数始终为 0 它没有更新其中的数据

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return pokemonList.count

【讨论】:

【参考方案4】:

最大的问题是你的 PokemonDetailViewController 不是 UITableViewController。它需要从 UITableViewDataSource、UITableViewDelegate 固有,然后连接到情节提要视图以提供表格的数据和格式。

【讨论】:

以上是关于UITableViewCells 未出现在第二个选项卡中的主要内容,如果未能解决你的问题,请参考以下文章

菜单栏未显示在第二个窗口上

在 didSelectRowAtIndexPath 执行后 UITableViewCells 消失了吗?

数组中的数据未显示在第二个 UIPickerView 中

UITableViewCells 最初没有出现

ActiveMQ 消息未在第二个消费者中接收

使用webview在第二个活动中未显示操作栏