如何在静态单元格中访问textLabel

时间:2018-07-30 17:48:18

标签: ios swift uitableview cell

不幸的是,经过大量的搜索和阅读,我并非来自以下内容。我想使用静态表来显示某些数据。 (有更好的选择吗?)

在我看来,我首先在下面放了一个洋葱图,上面有一个容器视图。容器视图再次引用了表视图控制器。

我在单元格上做了一个出口,然后我想我可以轻松地调整文本。

现在,我想更改表中字段的文本,但是很遗憾,我没有成功。

当我启动该应用程序时,该表完全是空的,如屏幕截图所示。

我在做什么错了?

Overview

class TableViewController: UITableViewController {
    var data: [String] = ["Muis", "Aap", "Koe", "Vis"]

override func viewDidLoad() {

    super.viewDidLoad()
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return data.count

}

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    let iets = data[indexPath.row]
    cell.textLabel?.text = iets

    return cell
    }
}

4 个答案:

答案 0 :(得分:1)

您需要改变这一思维方式。您不拥有单元格,UITableView拥有。通过使用UITableViewDataSource的实现,它将提供合适的单元格:

  • func numberOfSections(in: UITableView) -> Int
  • func tableView(UITableView, numberOfRowsInSection: Int) -> Int
  • func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

通常,文本(您的实际数据)将保存在该数据源可用的列表中。

示例:

var data: [String] = []

// Other functions

func numberOfSections(in: UITableView) -> Int {
    return 1
}

func tableView(UITableView, numberOfRowsInSection: Int) -> Int {
    return data.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "YOUR_IDENTIFIER")
    cell.text = data[indexPath.row]
    return cell
}

现在,如果要更改此单元格的文本,只需要做的就是更新数据列表并重新加载数据。

答案 1 :(得分:1)

如果要使用静态单元格

  • 忘记使UITableViewCell实例以及所有tableview数据源和委托方法出队。
  • 在Interface Builder中,选择表视图,然后从Static Cells弹出窗口中选择 Content
  • 将所需的静态单元格数量拖动到画布中
  • 在视图控制器中声明IBOutlet并将它们直接连接到单元格中的UI元素

答案 2 :(得分:1)

经过大量测试和阅读,我所做的事情。我已经为可规类创建了一个序列。

if (segue.identifier == "myEmbeddedSegue") {
        let childViewController = segue.destination as! hondDetialTableViewController
        childViewController.hondId = hondData["hondId"]!
    }

在此过程中,我仅发送hondId,以及我询问实体的其他所有信息。

答案 3 :(得分:0)

对不起,但这根本不是UITableView的工作方式。您在tableview的Xib / Storyboard中定义的UITableViewCell只是“模型”或模板,在您将它们出队之前,它们实际上并不存在。

您可以在此处阅读UITableView的工作方式:http://www.thomashanning.com/uitableview-tutorial-for-beginners/

如果要在表视图中显示任何内容,则必须返回numberOfSections> 0;同样,该部分还必须具有numberOfRows> 0,否则,将不会显示任何内容(如果正确设置,可能会显示页眉和页脚)。

无论如何,只有在将单元出队后才能访问它们。在大多数情况下,在XIB中创建UITableViewCell的插座是没有用的。

您可以探索其他选项,例如UIStackView,或者您所需要的仅仅是带有自定义标签的简单自定义UIView,并使用NSLayoutConstraints对其进行正确设置和布局。那里有很多资源,这只是我快速通过Google搜索供您使用的一种资源:https://www.youtube.com/watch?v=de0sthle44I

祝你好运。