如何使用 viewController 中的 class 函数访问编辑 UILabel

How To get access to edit UILabel by using a class function inside the viewController

ViewController 有一个名为 userInput 的文本字段,它允许用户添加一个值,所以我想在用户按下计算按钮时更改标签名称。我使用 class 修改标签名称,当从 class xcode 内部调用 viewController 标签时显示 "viewController does not have a member name userAnswer" 但我的代码确实有一个名为 userAnswer 的标签。

import UIKit

class ViewController2: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate {

    @IBOutlet var userInput: UIPickerView!

    @IBOutlet var userTo: UIPickerView!

    @IBOutlet var userValue: UITextField!

    @IBAction func calculate(sender: AnyObject) {
        var textboxValue = userValue.text.toInt()

        if textboxValue != nil {

            if selection1 == 0 {

                let milimeter = Milimeter()
                milimeter.toCnverter(textboxValue!, item: selection2)
                userAnswer.text = " "

            } else if selection1 == 1 {

            } else if selection1 == 2 {

            } else if selection1 == 3 {

            } else if selection1 == 4 {

            }


        } else {

            userAnswer.text = "Please enter a Value"
        }

    }

    @IBOutlet var userAnswer: UILabel!

    let length1 = ["Milimeter","Centimeter","Inch","Meter","Kilometer"]
    let length2 = ["Milimeter","Centimeter","Inch","Meter","Kilometer"]
    var selection1 = 0
    var selection2 = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        userInput.delegate = self
        userInput.dataSource = self

        userTo.delegate = self
        userTo.dataSource = self
    }

    class Milimeter {

        func toCnverter(value: Int, item: Int) {

            switch item {

            case 0:
                userAnswer.text = " " // i can't access , shows error
            case 1:
                println("Inch")

            case 2:
                println("Kilometer")

            default:
                println(" ")

            }
        }
    }
}

如果您在 .h 文件中创建了标签的 IBOutlet,如下所示:

@property (nonatomic, strong) IBOutlet UILabel *userAnswer;

尝试通过self.userAnswer

访问它

您似乎忘记了将 UIStoryboard 中的 UILabel 与代码中的 UILabel 连接起来。为了 100% 确定,请从您的代码中删除该变量,然后将 UIStoryboard 的插座重新连接到您的代码。

看完全部代码后编辑:

您的 class 毫米不知道您的 UILabel 因为它不是它的属性,而是 UIViewController.

的属性

我的建议:func toConverter 应该 return 它转换的内容。这使得它也可以测试 -> func toConverter(value: Int, item: Int) -> String

您的 if-statement 看起来像这样:

if selection1 == 0 {
  let milimeter = Milimeter() 
  userAnswer.text = milimeter.toCnverter(textboxValue!, item: selection2)
}

Here 是 swift

中关于 Access Control 的更多信息