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

标签 ios swift

我在 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/

相关文章:

objective-c - 如何在iOS中本地播放.ts(传输流)文件

ios - 如何使用 UIPageVIewController 以及如何更改 PageControl 的背景? - swift

json - 在 Swift 中从数组中获取项目

ios - 无法在 Swift 中使用时间延迟为 UIImage 设置动画

ios - 如何使用 Swift 跨 ViewControllers 继续一个功能?

ios - 如何保存NSMutableArray来解析?

ios - 如何打印包含媒体和多部分表单数据的数据

ios - 针对 iOS 上的 Azure Graph API 的非交互式登录(缓存凭据)

ios - iOS 应用程序中的高级短信和 IVR 支付方式

iphone - 有没有办法让 PayPal 网页 View 旋转为横向模式?