斯威夫特& UITextFieldDelegate:如何获取调用委托的对象?或者使用变量调用文本框?

时间:2016-06-06 05:33:43

标签: ios swift delegates

我正在尝试在XCode和Swift中创建我的第一个应用程序。没什么大不了的,只是我经常玩的游戏的简单计算器。对我来说很方便大笑。

它应该只有6个文本框,每个框是我拥有的材料数量。你可以"结合"材料。 4级1材料与1级2材料相结合,依此类推至6级。

我可以有1级1级,3级2级,1级3级,0级4级,3级5级,1级6级。我会把每个放在一个文本框中,按下按钮,它会告诉我我还需要多少1级材料来获得另一个等级6。

无论如何,按照此处的指南https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson3.html,您可以手动定义文本框。但是,我有6个,我觉得必须手动定义每个。如果我有一个带有100个文本框的巨大应用程序,那就太荒谬了。

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    // MARK: Properties
    @IBOutlet weak var txt1: UITextField!
    @IBOutlet weak var txt2: UITextField!
    @IBOutlet weak var txt3: UITextField!
    @IBOutlet weak var txt4: UITextField!
    @IBOutlet weak var txt5: UITextField!
    @IBOutlet weak var txt6: UITextField!
    @IBOutlet weak var btnGo: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        txt1.delegate = self
        txt2.delegate = self
        txt3.delegate = self
        txt4.delegate = self
        txt5.delegate = self
        txt6.delegate = self
    }

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

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        // Hide the keyboard.
        textField.resignFirstResponder()
        return true
    }

    func textFieldDidEndEditing(textField: UITextField) {
        // here is where its dumb
        txt1.text = textField.text
    }

    // MARK: Actions

    @IBAction func calculateItems(sender: UIButton) {
        // do my calculations
    }


}

正如您在func textFieldDidEndEditing中所看到的,这不会奏效。我阅读了一个提示,为每个输入分配标签。不过,我必须像这样手动计算每一个:

func textFieldDidEndEditing(textField: UITextField) {
        if (textField.tag == 1) {
            txt1.text = textField.text
        }

        if (textField.tag == 2) {
            txt2.text = textField.text
        }

        if (textField.tag == 3) {
            txt3.text = textField.text
        }

        if (textField.tag == 4) {
            txt4.text = textField.text
        }

        if (textField.tag == 5) {
            txt5.text = textField.text
        }

        if (textField.tag == 6) {
            txt6.text = textField.text
        }
    }

同样,这似乎相当愚蠢,每个人都这样做..

我需要什么

要么

A)能够通过变量

调用文本字段
var dynText = textField
dynText.text = textField.text

但是,这会抛出一个错误,说变量dynText没有文本成员。

B)知道哪个对象(文本框)首先命中/调用了委托。

我该如何解决这个问题?我怀疑你们是否在手动定义应用程序中的每个文本框!

0 个答案:

没有答案