我正在尝试学习Apple的Swift。我最近尝试构建一个GUI应用程序,但我有一个问题:
如何与应用的GUI元素进行交互?例如,我使用界面构建器来创建UILabel,然后通过按住Control键点击它将它连接到我的viewcontroller,这样我就得到了@IBOUTLET。现在,在我的视图控制器中,如何编辑此UILabel的文本?换句话说,我可以使用什么代码以编程方式控制故事板上某些内容的文本?我在网上找到的所有方法似乎都只使用在代码中生成的按钮,而不是在故事板上生成的按钮。
我看过像
这样的代码self.simpleLabel.text = "message"
如果这是正确的,我如何将其与相关标签链接?换句话说,我如何调整此代码以与IBOutlet连接(如果这就是我的工作)
答案 0 :(得分:27)
如果您已成功将控件与IBOutlet
课程中的UIViewController
相关联,则会将该属性添加到该属性中,您只需将 simpleLabel 替换为您的任何内容将您的IBOutlet
连接命名为:
class MyViewController: UIViewController {
@IBOutlet weak var myLabel: UILabel!
func someFunction() {
self.myLabel.text = "text"
}
}
答案 1 :(得分:23)
您创建的插座必须由您命名。插座属于您的视图控制器。 self.simpleLabel
表示获取名为' simpleLabel'的 my 属性的值。
由于不同的商店有不同的名称,因此在您的商店被命名为“SimpleLabel”之前,使用self.simpleLabel
一定不会有效。尝试更换简单的标签'用你创建它时给插座的名字。
现在正确的方法是:
self.yourLabelName.text = "message"
答案 2 :(得分:4)
如果您对IBOutlet有这样的话:
@IBOutlet var someLabel: UILabel!
然后您可以像在示例中一样设置text属性:
someLabel.text = "Whatever text"
如果您遇到此问题,可能您没有在正确的位置分配text属性。如果它在一个未被调用的函数中,那么该行将不会执行,并且text属性不会改变。尝试覆盖viewDidLoad函数,并将行放在那里,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
someLabel.text = "Whatever text"
}
然后,只要视图加载,您就会设置text属性。如果您不确定某行代码是否正在执行,您可以随时在其中放置断点,或添加一些输出。像
这样的东西println("Checkpoint")
在你不确定的代码块中,可以真正帮助你查看它何时运行。
希望这有帮助。
答案 3 :(得分:3)
您可能尝试更改不在主线程中的UI组件,在这种情况下,请执行以下操作:
DispatchQueue.main.async {
someLabel.text = "Whatever text"
}