我正在尝试在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)知道哪个对象(文本框)首先命中/调用了委托。
我该如何解决这个问题?我怀疑你们是否在手动定义应用程序中的每个文本框!