使用故事板中定义的自定义类
Posted
技术标签:
【中文标题】使用故事板中定义的自定义类【英文标题】:using custom class defined within storyboard 【发布时间】:2019-06-02 08:58:24 【问题描述】:在 Xcode 中,我可以在标识符检查器中定义一个自定义类,但我该如何使用它们?下面的例子:
class c1 : UITableViewCell
func celltest()
let i = 99;
class NicePlaceTableViewController: UITableViewController
.
.
.
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath)
**cell.celltest()** .. has no member celltest
let place = places[indexPath.row]
cell.textLabel?.text = place.name
cell.detailTextLabel?.text = "\(place.timestamp)"
return cell
如果知道reuseIdentifier,但不知道它的自定义类——在本例中是“c1”——我怎样才能在不违反Xcodes编译检查的情况下访问类c1中定义的方法?
【问题讨论】:
【参考方案1】:你只需要强制转换为c1
:
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1
cell.celltest()
顺便说一句,c1
不是一个好的类名。
【讨论】:
【参考方案2】:您只需要将单元格类型转换为c1
的对象。您可以通过在cellForRowAt
方法中编写以下代码来做到这一点,如下所示:
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1
因此编译器会知道您的自定义 tableview 单元类的类型,cell.celltest()
不会给您错误。
另一个快速风格指南的参考,它可以极大地帮助你使用类名和方法名:
https://github.com/raywenderlich/swift-style-guide
【讨论】:
【参考方案3】:我不知道类名“c1”。有什么办法可以动态获取吗?我不明白为什么单元格被其reuseIdentifier“cell1”查询并且xcode不知道应该指定单元格的类? (c1)
【讨论】:
恐怕不行。您必须输入单元格(在情节提要中分配的类),然后才能使用自定义 tableview 单元格的属性和方法。【参考方案4】:Xcode Interface Builder 是一个可视化创建 UI 界面的 IDE。
您对 tableview 内的单元格的配置将使用在 tableview 中注册的 c1 单元格实例化 NicePlaceTableViewController。
如果没有带有 Interface Builder 工具的 Xcode,您必须自己以编程方式创建它,如下所示:
class NicePlaceTableViewController: UITableViewController
override func viewDidLoad()
super.viewDidLoad()
tableView.register(c1.self, forCellReuseIdentifier: "Cell1")
此代码为给定标识符注册一个类类型。要访问单元格,您必须使用 tableView.dequeueReusableCell 方法,该方法将作用于内部池以创建或重用单元格。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath)
出队的单元格是 UITableViewCell 类型。如果您想将其向下转换为 c1 类型,那么您必须使用 !运算符。
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1
【讨论】:
以上是关于使用故事板中定义的自定义类的主要内容,如果未能解决你的问题,请参考以下文章