gpt4 book ai didi

ios - Swift 中来自 nib 的自定义 UITableViewCell

转载 作者:IT王子 更新时间:2023-10-29 04:55:45 25 4
gpt4 key购买 nike

我正在尝试从 Nib 创建自定义表格 View 单元格。我指的是这篇文章here .我面临两个问题。

我创建了一个 .xib 文件,其中拖有一个 UITableViewCell 对象。我创建了 UITableViewCell 的子类,并将其设置为单元格的类,并将 Cell 设置为可重用标识符。

import UIKit

class CustomOneCell: UITableViewCell {

@IBOutlet weak var middleLabel: UILabel!
@IBOutlet weak var leftLabel: UILabel!
@IBOutlet weak var rightLabel: UILabel!

required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}

override init(style: UITableViewCellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

// Configure the view for the selected state
}

}

在 UITableViewController 中我有这段代码,

import UIKit

class ViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {

var items = ["Item 1", "Item2", "Item3", "Item4"]

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

// MARK: - UITableViewDataSource
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return items.count
}

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let identifier = "Cell"
var cell: CustomOneCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomOneCell
if cell == nil {
tableView.registerNib(UINib(nibName: "CustomCellOne", bundle: nil), forCellReuseIdentifier: identifier)
cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomOneCell
}

return cell
}
}

这段代码没有错误,但是当我在模拟器中运行它时,它看起来像这样。

enter image description here

在 Storyboard的 UITableViewController 中,我没有对单元格做任何事情。空白标识符,没有子类。我尝试将 Cell 标识符添加到原型(prototype)单元格并再次运行它,但我得到了相同的结果。

我遇到的另一个错误是,当我尝试在 UITableViewController 中实现以下方法时。

override func tableView(tableView: UITableView!, willDisplayCell cell: CustomOneCell!, forRowAtIndexPath indexPath: NSIndexPath!) {

cell.middleLabel.text = items[indexPath.row]
cell.leftLabel.text = items[indexPath.row]
cell.rightLabel.text = items[indexPath.row]
}

如我提到的文章所示,我将 cell 参数的类型从 UITableViewCell 更改为 CustomOneCell,这是我的 UITableViewCell 的子类。但是我收到以下错误,

使用选择器 'tableView:willDisplayCell:forRowAtIndexPath:' 的覆盖方法具有不兼容的类型 '(UITableView!, CustomOneCell!, NSIndexPath!) -> ()'

有人知道如何解决这些错误吗?这些在 Objective-C 中似乎工作正常。

谢谢。

编辑:我刚刚注意到,如果我将模拟器的方向更改为横向并将其转回纵向,单元格就会出现!我仍然无法弄清楚发生了什么。我上传了一个 Xcode 项目 here如果您有时间快速查看,请演示问题。

最佳答案

使用 Swift 5 和 iOS 12.2,您应该尝试以下代码来解决您的问题:

CustomCell.swift

import UIKit

class CustomCell: UITableViewCell {

// Link those IBOutlets with the UILabels in your .XIB file
@IBOutlet weak var middleLabel: UILabel!
@IBOutlet weak var leftLabel: UILabel!
@IBOutlet weak var rightLabel: UILabel!

}

TableViewController.swift

import UIKit

class TableViewController: UITableViewController {

let items = ["Item 1", "Item2", "Item3", "Item4"]

override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: "CustomCell")
}

// MARK: - UITableViewDataSource

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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell

cell.middleLabel.text = items[indexPath.row]
cell.leftLabel.text = items[indexPath.row]
cell.rightLabel.text = items[indexPath.row]

return cell
}

}

下图显示了一组与提供的代码一起使用的约束,没有来自 Xcode 的任何约束歧义消息:

enter image description here

关于ios - Swift 中来自 nib 的自定义 UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25541786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com