ViewController 中的 Swift TableView 在标签栏中的 Navigation VC 中:单元格不会填充列表中的数据

Posted

技术标签:

【中文标题】ViewController 中的 Swift TableView 在标签栏中的 Navigation VC 中:单元格不会填充列表中的数据【英文标题】:Swift TableView in ViewController In Navigation VC in Tab Bar: Cells won't populate with data from list 【发布时间】:2017-04-23 18:51:38 【问题描述】:

我似乎无法用标题填充我的表格视图中的单元格。我将我的 tableview 放在我的 viewcontroller 中,并将其嵌入到导航控制器中,该导航控制器嵌入在标签栏视图控制器中。表格视图加载但单元格没有标题。我不确定我做错了什么。

            import Foundation
            import UIKit

            class ThirdViewController: UIViewController 

                let tableData = ["One","Two","Three"]

                override func viewDidLoad() 
                    super.viewDidLoad()
                    // Do any additional setup after loading the view, typically from a nib.
                    navigationController?.navigationBar.barTintColor = hexStringToUIColor(hex: "#00a5ff")
                    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont(name: "Futura", size: 25)!]
                    self.title = "Interests"
                

                func tableView(_ tableView: UITableView!, numberOfRowsInSection section: Int) -> Int
                
                    return tableData.count
                

                func tableView(_ tableView: UITableView!,
                               cellForRowAtIndexPath indexPath: IndexPath!) -> UITableViewCell!
                

                    let cell:UITableViewCell = UITableViewCell(style:UITableViewCellStyle.default, reuseIdentifier:"Cell")

                    cell.textLabel?.text = tableData[indexPath.row]

                    return cell
                

                func hexStringToUIColor (hex:String) -> UIColor 
                    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

                    if (cString.hasPrefix("#")) 
                        cString.remove(at: cString.startIndex)
                    

                    if ((cString.characters.count) != 6) 
                        return UIColor.gray
                    

                    var rgbValue:UInt32 = 0
                    Scanner(string: cString).scanHexInt32(&rgbValue)

                    return UIColor(
                        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
                        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
                        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
                        alpha: CGFloat(1.0)
                    )
                
            

【问题讨论】:

【参考方案1】:

您需要将视图控制器设置为数据源并在表格视图上调用 reloadData。

override func viewDidLoad() 
  super.viewDidLoad()
  // Do any additional setup after loading the view, typically from a nib.
  navigationController?.navigationBar.barTintColor = hexStringToUIColor(hex: "#00a5ff")
  navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont(name: "Futura", size: 25)!]
  self.title = "Interests"

  yourTableView.dataSource = self

  yourTableView.reloadData()

【讨论】:

【参考方案2】:

哇,那段代码有这么多错误...

首先

UITableView 属性在哪里? 你需要声明

@IBOutlet weak var tableView: UITableView!

并将其连接到情节提要(或 .xib 文件)上的表格视图

第二

您需要同时采用两种表格视图协议。

UITableViewDatasourceUITableViewDelegate

第三

将 ViewController 设置为委托

tableView.delagate = self tableView.datasource = self

第四

如上所述,您需要实现 func numberOfSections

数据源所需的方法。

第五

一切都应该正常工作。如果没有,请阅读有关 UITableView 的信息。 因为我看到您没有在 cellForRowAtIndexPath 方法上出列单元格。

问候

【讨论】:

【参考方案3】:

你还需要实现“numberOfSections”数据源方法:

func numberOfSections(in tableView: UITableView) -> Int

  return 1

除此之外,您需要将您的 ThirdViewController 类标记为 UITableViewDataSource,并将 tableView 的 dataSource 属性设置为 self:

ThirdViewController: UIViewController, UITableViewDataSource

     override func viewDidLoad() 
     super.viewDidLoad()
     ........
     yourTableView.dataSource = self



【讨论】:

以上是关于ViewController 中的 Swift TableView 在标签栏中的 Navigation VC 中:单元格不会填充列表中的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何全局保存一个人的 UID 以在 Swift 的任何 ViewController 中检索它

如何将 ViewController.swift 连接到 Storyboard 中的 ViewController?

Swift 3 UIStatusBarStyle 不适用于 UINavigationController 中的单独 ViewController

使用 Swift 3 在 ViewController 中的 GroupTable

从 Swift 中的不同类访问 ViewController 中的对象

在 Swift 中的 ONE ViewController 中的视图之间传递数据