将原型单元连接到View Controller [Swift 4]

时间:2018-12-06 07:32:08

标签: swift uitableview

我是编程新手,目前正在从事类似应用程序的新闻提要。我有一个正常的Table视图并且运行良好,但现在想尝试使用模拟单元格类型。因此,我创建了一个标签,并认为以通常的方式连接标签会很好,但是我错了。所以我想知道如何让我的Text标签连接到我的视图控制器,以便可以使用自定义单元格。

class ViewController: BaseViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet var newsfeedTableView: UITableView!

var ref: DatabaseReference!

var posts = [String]()


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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "cell")

//here is where I need the custom label to get the posts 
    cell.textLabel?.text = posts[indexPath.row]
    cell.textLabel?.font = UIFont.boldSystemFont(ofSize: 18.0)

    return cell
 }
}

Costum cell

2 个答案:

答案 0 :(得分:3)

创建UITableViewCell的子类并将IBOutlet连接到该类

class YourCell: UITableViewCell {
    @IBOutlet weak var customLabel: UILabel!
    ...
}

不要忘记在情节提要中设置原型单元的类:

enter image description here

然后在cellForRowAt数据源方法中将已出队的单元格下调为YourCell

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! YourCell

然后您就可以访问YourCell个网点

cell.customLabel.text = "SomeText"
...

答案 1 :(得分:1)

我假设您正在使用Storyboard。

首先,您应该了解,使用自己的自定义表单元格几乎没有什么区别。在这种情况下,在方法“ cellForRowAtIndexPath”中,使单元出队后,您只需要像'as!这样键入表单元格即可。 YourCustomTableCellClass'。在此行之后,您可以访问该类的每个属性。

首先,根据需要在Storyboard上设计表格单元。

现在,创建UITableViewCell的子类,并将该类分配给您在Storyboard上设计的原型自定义单元格。另外,不要忘记在Storyboard表单元中设置“重用标识符”。

然后将您的商店与Storyboard中的自定义单元类连接起来。

现在您可以使用如下代码:

 class YourTableCellClass: UITableViewCell {

// I'm using these outlets as a sample, but you have to connect them from Storyboard.
var leftTextLabel: UILabel!
var rightTextLabel: UILabel!
}

class YourTableController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

// MARK: - TableView Delegate & DataSource
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1 // return your number of rows here...
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 100 // return the height for the row here.....or you can set height from Storyboard if you have fix height of all rows.
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier", for: indexPath) as! YourTableCellClass
    cell.leftTextLabel.text = "Text" // Set text here....
    cell.rightTextLabel.text = "Text" // Set text here....
    return cell
}
}