gpt4 book ai didi

ios - 无法访问自定义单元格中的标签

转载 作者:搜寻专家 更新时间:2023-11-01 06:24:41 25 4
gpt4 key购买 nike

我在 Storyboard上有一个 ViewController 和一个 TableViewController。TableViewController 有一个带有标签的自定义单元格。自定义单元格有自己的类 CompanyTableViewCell.swift:

import UIKit
class CompanyTableViewCell: UITableViewCell {

@IBOutlet var companyName : UILabel

init(style: UITableViewCellStyle, reuseIdentifier: String) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
println("Cell's initialised")
}

... // other default cell methods
}

在我的 TableViewController 中我有方法:

override func viewDidLoad() {
super.viewDidLoad()
self.tableView.registerClass(CompanyTableViewCell.self, forCellReuseIdentifier: "CompanyCell")
println("Cell's registered")
}

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell? {
let cell = tableView.dequeueReusableCellWithIdentifier("CompanyCell") as CompanyTableViewCell
println(cell.companyName)
cell.companyName.text = "Company name"
return cell
}

当我运行代码时,如果 TableViewController 被标记为初始 View Controller ,它运行正常,我的自定义单元格上的标签文本被成功更改。我可以看到一堆带有 Company name 的单元格。

但是当我将初始 View Controller 属性分配给 ViewController 并尝试从它访问 TableViewController 时(ViewController 有一个运行 searchByName 操作的按钮):

// ViewController.swift
@IBAction func searchByName(sender : UIButton) {
var vc = SearchTableViewController(style: UITableViewStyle.Plain)
vc.companies = self.companies
self.showViewController(vc, sender: self)
}

我对 cell.companyName.text = "Company name" 字符串有错误的应用迷恋: fatal error :无法展开 Optional.None。在前面的字符串 println(cell.companyName) 上打印 nil 到控制台,尽管在控制台中我看到单元类已注册并且单元对象已初始化。

问题是如何将文本分配给标签,我忘记了什么?以及为什么它在第一种情况下有效但在第二种情况下无效。谢谢。

最佳答案

@IBOutlet var companyName : UILabel 是一个 outlet ,如果你调用 var vc = SearchTableViewController(style: UITableViewStyle.Plain) outlet companyName label is not initialized ,因此它是 nil ,因此访问 companyName 标签会导致崩溃。

但在第一种情况下,您是从具有 SearchTableViewController 场景的 Storyboard初始化 viewController 包含 CompanyTableViewCell 和导出 companyName 并且它连接到Cell,因此它被初始化,因此它按预期工作。

解决方案是:

  1. 如果您正在使用 Storyboard,请使用 instantiateViewControllerWithIdentifier: 方法来初始化 viewController(假设 SearchTableViewController 在 Storyboard中有 CompanyTableViewCell)。

  2. 如果您以编程方式执行操作,则覆盖 CompanyTableViewCell 的所有初始化方法以创建标签并将其添加到单元格。

关于ios - 无法访问自定义单元格中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24432090/

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