【问题标题】:UITableViewController shows nothing but horizontal linesUITableViewController 只显示水平线
【发布时间】:2016-07-26 19:02:45
【问题描述】:

我刚开始使用 Swift 和 xCode,目前正在搞乱 UITableView,我无法仅将“测试”写入表格。

我在Storyboard中创建了一个UITableViewController,为其指定了一个自定义类(我的swift文件如下),填写'ClientCell'作为单元格的重用标识符,代码如下:

class TableViewController: UITableViewController {


  @IBOutlet var clientTable: UITableView!

  override func viewDidLoad() {
      super.viewDidLoad()

      clientTable.dataSource = self.dataSource;
      clientTable.delegate = self;
  }

  func numberOfRowsInSection(tableView: UITableView) -> Int {
      return 1
  }

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("ClientCell", forIndexPath: indexPath) as! CustomTableViewCell
        cell.tableLabel.text = "test"

        return cell
    }
}

在故事板中,我在原型单元格中添加了一个“UILabel”,并在 CustomTableViewCell.swift 中为其创建了一个名为“tableLabel”的插座。 在做如此简单的事情时,我对所有需要考虑的事情感到困惑。 当我运行它时,模拟器只显示一个带有很多水平线的表格,但没有显示“测试”。

【问题讨论】:

  • 您正在 viewDidLoad() 覆盖中编写 tableview 数据源方法。没有办法永远有效。将 numberOfRowsInSection 和 cellForRowAtIndexPath 移动到类扩展中,并在任何其他函数体之外声明它们。
  • @Dare 加入类扩展,你的意思是在 viewDidLoad() 之前?
  • @Dare 我不确定这是否适用于 UITableViewController 以同样的方式。我得到:“TableViewController”与协议“UITableViewDataSource”的冗余一致性
  • 无需再次符合委托和数据源。只是扩展类。即使没有扩展它也可以工作。但是你不能遵守 viewDidLoad() 内部的协议。它必须是不在该函数体内的类级别声明。

标签: ios swift


【解决方案1】:

你还没有使用 numberOfRowsInSection 方法..... 此外,您还需要将表视图的数据源和委托设置为您正在编写这些方法的类(以防万一)。

【讨论】:

  • 感谢您的回答。我更新了我的代码并在这里进行了编辑。但是,我仍然有同样的问题。我是否正确地假设数据源和委托都是自我的?
  • 除非您另外设置它们,否则它们是。您的原型单元格的自动布局也有可能是错误的,因此文本不可见。
  • 您也可以尝试查看应用程序中的视图。在模拟器中运行应用程序时,您可以调试视图层次结构并确定是否正在制作单元格。如果是,你应该看看你的约束。
  • 你建议什么约束?一个水平的只是没有做的伎俩。
  • 您需要为视图设置足够的约束以了解其在其父视图中的 x 和 y 位置。至少您应该将垂直居中约束添加到标签并为其分配前导值。
【解决方案2】:

至少你需要这个:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1 // this should really be from your data source
}

如果您在 Xcode 中创建 UITableViewController 子类,模板将包含您可能想要填写的所有方法的注释版本。

【讨论】:

  • 我上面代码中的最后一个方法不是已经完成了吗?我在那里遇到了一个错误。
  • @FelixF。不,这不是通过最后一种方法完成的。最后一种方法是如何在加载每个单元格时对其进行自定义。 numberOfRowsInSection 将返回表格中出现的单元格数量。没有它,你会看到 0 个单元格出现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 2019-01-31
  • 2013-03-24
  • 2011-05-21
  • 1970-01-01
  • 2013-02-26
相关资源
最近更新 更多