Swift:将包含自定义标签的单元格从数组添加到UITableView

时间:2018-02-12 12:01:53

标签: swift uitableview

如何以编程方式将单元格添加到UITableview并使用myArray [cellNumber]中的数据填充单元格。数组中的数据是String类型。 tableview只是一个与插座连接的UITableView

我发现的所有例子都是+30行或者不起作用......我使用swift 4和UIKit

3 个答案:

答案 0 :(得分:1)

    let array = ["Monday", "Friday", "Saturday", "Sunday"]

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    cell.textLabel?.text = array[indexPath.row]

    return cell
}

如果这对您不起作用,我需要您的代码中的更多信息来检查另一个可能的错误。

如果您从代码创建tableview,则需要定义

  

tableview.datasource = self

     

tableview.delegate = self

并使课程从UITableViewDelegateUITableViewDataSource

延伸

答案 1 :(得分:1)

这是您处理单元格选择的方式。

    // Data model: These strings will be the data for the table view cells
    let myArray: [String] = ["Horse", "Cow", "Camel", "Sheep", "Goat"]

    // create a cell for each table view row
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                  // create a new cell if needed or reuse an old one
                  var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
                // set the text from the data model
                cell.textLabel?.text = self.myArray[indexPath.row]
           return cell
     }

你应该考虑的事项:

  • 符合TableView Delegate和DataSource协议。 UITableViewDelegateUITableViewDataSource
  • 连接Interface Builder插座 连接引用,dataSource和委托出口。
  • 注册单元类 在viewDidLoad方法中调用registerClass(_:forCellReuseIdentifier:)
  • 使用正确的ReuseIdentifier名称var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCel
  • 创建单元格

到目前为止,您的ViewController类应如下所示:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet
    var tableView: UITableView
    var myArray: [String] = ["We", "Heart", "Swift"]

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.myArray.count;
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell

        cell.textLabel?.text = self.myArray[indexPath.row]

        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        println("You selected cell #\(indexPath.row)!")
    }
}

以下示例是We❤Swift的longer post的改编和简化。

Apple Developers Doc Create a Table View

答案 2 :(得分:0)

以下示例应该适合您。享受:)

class TableviewDemoViewController: UIViewController, UITableViewDelegate , UITableViewDataSource {

//MARK: - IBOutlet
@IBOutlet weak var tableView: UITableView!

//MARK: - Variables
let arrayToPopulate = ["Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday", "Sunday"]
let tableviewCellHeight = 50.0

//MARK: - View initializer
override func viewDidLoad() {

    super.viewDidLoad()
    self.setupTableview()
}

func setupTableview() {

    tableView.datasource = self
    tableView.delegate = self
}

//MARK: -UITableViewDelegate
func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

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

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

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

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return tableviewCellHeight
} }