【问题标题】:swift 3 textlabel text is true [closed]swift 3 textlabel 文本为真[关闭]
【发布时间】:2017-06-05 15:35:54
【问题描述】:

此代码在这里给我一个错误。对不起,我是新手。我想制作一个应用程序,如果我在文本字段中输入“hi”,它会在标签中给我一个响应“hello”。

import Cocoa

class ViewController: NSViewController {


    @IBAction func label(_ sender: Any) {

    }
    @IBAction func sendBtn(_ sender: Any) {
        if label.text == "hi" {
            txtOutput.text = "hello!"
        }
    }
    @IBAction func txtOutput(_ sender: Any) {

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}

【问题讨论】:

  • 你的错误在哪里,它说了什么?
  • 嗨,欢迎来到 SO,但我担心这对 SO 来说可能有点过于宽泛了……这更像是一个 QA 网站,而不是“教我如何编码”:) 也许试试代码审查堆栈交换或查看教程。
  • 我可以告诉你,你错过了 2 个你已经使用的 IBOutlet 变量。那么:其余的都可以在 IB 中实现。
  • 你有标签的出口吗?我同意 Daij-Djan 的观点 - 有很多教程介绍了这些类型的应用程序,显示了所有必需的步骤,并解释了你输入、拖动等每件事的原因。祝你好运。

标签: swift xcode macos textfield


【解决方案1】:

txtOutput 应连接为 @IBOutlet 而不是 @IBAction

@IBAction 只会触发一些操作,但不会获得对对象的引用

使用@IBOutlet,您可以获得对该对象的引用,并可以访问该对象的.text 等属性

将连接从 IB 拖到代码时要小心

对于 iOS,你的代码应该是这样的(因为你使用 NSViewController 它应该是它的 Cocoa 对象)

@IBOutlet var txtOutput: UILabel!
// or 
@IBOutlet weak var txtOutput: UILabel!

但不要只是更改代码。仔细检查是否在 InterfaceBuilder 中的标签处也分配了此连接

更新

现在您可以设置文本:

txtOutput.stringValue = "Hello"

【讨论】:

  • 没有修复我的错误。错误是 Any() 类型的值 -> 没有成员 txt 并且 NSTextField 类型的值没有成员 txt。我将 @IBAction func txtOutput(_ sender: Any) { } 更改为 (at)IBOutlet weak var txtOutput: NSTextField!
  • 你应该在你的初始问题中包含你失败的错误信息!
  • 不要只更改代码 - 还要更改界面生成器的连接
  • 我在答案中添加了txtOutput.stringValue = "Hello" - 在 NSTextField 上设置文本的方式与在 UILabel 上设置文本的方式不同
  • 将其再次拖入代码中的简单方法为IBOutlet,或者如果您选择NSTextField,则在界面构建器中检查,如果有连接,则在右侧打开connections inspector
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多