' [的UILabel]'没有名为' text'的成员

时间:2015-04-11 10:29:08

标签: swift interface-builder

升级到Xcode 6.3后,无法将字符串分配到UILabel。我收到了Swift编译器错误消息"' [UILabel]'没有名为' text'"在UILabel textLabel上。有什么想法来解决它吗?

import UIKit

class ViewController: UIViewController {

    @IBOutlet var nameTxt: [UITextField]!
    @IBOutlet var textLabel: [UILabel]!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func changeLabel(sender: UIButton) {
        self.textLabel?.text = "Success"
    }
}

2 个答案:

答案 0 :(得分:2)

当我们将故事板上的标签(或其他任何内容)连接到我们的源代码时,我们会看到一个如下所示的弹出菜单:

enter image description here

当你点击这里的“连接”时(我弹出的所有内容都是“textLabel”类型,其他一切都是默认的),它会生成以下代码行:

@IBOutlet weak var textLabel: UILabel!

但是,“Outlet”不是将对象从界面构建器连接到源代码的唯一选项。

如果我们更改“连接”下拉列表以选择“插座集合”,如下所示:

enter image description here

然后生成的代码行将与您问题中的代码行完全匹配:

@IBOutlet var textLabel: [UILabel]!

我们创建了一系列标签。这在某些情况下很有用,但可能不是我们实际想要的。

为了解决这个问题,我们必须首先确保取消挂钩我们的原始连接(否则,我们将有运行时异常)。

因此,如果您返回Interface Builder并右键单击相关标签,您将收到如下所示的菜单:

enter image description here

注意标签如何链接到“引用插座集合”,而不是“引用插座”?这是我们需要解决的问题。因此,单击该连接的X以取消链接。现在我们可以转到源代码并删除生成的@IBOutlet

现在,将您的标签重新定位为常规“Outlet”而不是“Outlet Collection”,并且您的changeLabel方法将按原样正常运行。

当您的标签正确连接为“Outlet”而不是“Outlet Collection”时,您的界面构建器右键菜单将如下所示:

enter image description here

(注意这个和上一个图像之间的区别。)

答案 1 :(得分:1)

@IBOutlet var nameTxt: [UITextField]!
@IBOutlet var textLabel: [UILabel]!

将您的商店描述为数组(方括号)。但因为它们只是简单的UI对象,所以将其更改为:

@IBOutlet var nameTxt: UITextField!
@IBOutlet var textLabel: UILabel!