Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift&;UITextFieldDelegate:如何获取调用委托的对象?还是用变量调用文本框?_Ios_Swift_Delegates - Fatal编程技术网

Ios Swift&;UITextFieldDelegate:如何获取调用委托的对象?还是用变量调用文本框?

Ios Swift&;UITextFieldDelegate:如何获取调用委托的对象?还是用变量调用文本框?,ios,swift,delegates,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级 无论如何,按照这里的指南,它让您手动定义文本框。然而,我有6个,我发现手工定义每

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

它只是应该有6个文本框,每个框是我拥有的材料的数量。你可以“组合”这些材料。4个级别1材质组合为1个级别2材质,依此类推至级别6

我可以有1个1级,3个2级,1个3级,0个4级,3个5级,1个6级。。我会把每一个放在一个文本框中,点击按钮,它会告诉我需要多少更多的1级材料才能获得另一个6级

无论如何,按照这里的指南,它让您手动定义文本框。然而,我有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 textfielddidediting
中看到的,这不起作用。我读了一篇提示,为每个输入指定标签。尽管如此,我还是必须手动计算每一项,如下所示:

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没有text的成员

B)了解哪个对象(文本框)首先命中/调用了代理


我怎样才能解决这个问题?我怀疑你们是在手动定义应用程序中的每个文本框

为什么要将文本指定给刚刚结束编辑的文本字段?调用此委托时,用户输入的文本已存在于该文本字段中。您在委托方法中收到的文本字段是调用委托方法的文本字段。ex in textfielddidediting您收到的文本字段与发生相应操作的文本字段相同。您不必像以前那样检查标记和赋值。有许多您需要更新用户刚刚填写的文本框的原因。例如:将“joe smith”转换为“joe smith”,或使用trim()删除额外空格,或删除无效字符。-我只想更新文本框,而不手动定义100个文本框。为什么要将文本分配给刚刚结束编辑的文本字段?调用此委托时,用户输入的文本已存在于该文本字段中。您在委托方法中收到的文本字段是调用委托方法的文本字段。ex in textfielddidediting您收到的文本字段与发生相应操作的文本字段相同。您不必像以前那样检查标记和赋值。有许多您需要更新用户刚刚填写的文本框的原因。例如:将“joe smith”转换为“joe smith”,或使用trim()删除额外空格,或删除无效字符。-我只想更新文本框,而不需要手动定义100个文本框。