iOS swift 在 uiview 中委托超过 1 个 uitextfield
iOS swift delegate with more than 1 uitextfield in a uiview
我有一个 iOS 应用程序,有一个 UIView
和三个 UITextField
(超过 1 个)
我想了解我的 class ViewController 管理 UITextField
.
的最佳实践是什么
- class MainViewController: UIViewController, UITextFieldDelegate ?
我想知道,因为我有不止一个 UITextField
而只有一个 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
最简单的方法是知道在委托方法中使用什么文本字段。 IE。你有 3 个文本字段:field1、field2、field3,当调用委托时你可以检测到要做什么:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if textField == field1 {
// do something
} else if textField == field2 {
// do something
} else if textField == field3 {
// do something
}
return true
}
不要忘记将所有字段的委托设为自己:field1.delegate = self
等
在你的情况下它会工作得很好。
如果你有更多的字段(10、20?),如果你想知道更好的解决方案,请告诉我,我会更新我的答案。
最好的方法是使用 tag
属性。
在 Apple Docs 上看到:
- (void)textFieldDidEndEditing:(UITextField *)textField {
switch (textField.tag) {
case NameFieldTag:
// do something with this text field
break;
case EmailFieldTag:
// do something with this text field
break;
// remainder of switch statement....
}
}
enum {
NameFieldTag = 0,
EmailFieldTag,
DOBFieldTag,
SSNFieldTag
};
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
switch textField {
case field1:
// do something
case field2:
// do something
case field3:
// do something
}
return true
}
这对我有用
import UIKit
class WeatherViewController: UIViewController,UITextFieldDelegate {
@IBOutlet weak var conditionImageView: UIImageView!
@IBOutlet weak var temperatureLabel: UILabel!
@IBOutlet weak var cityLabel: UILabel!
@IBOutlet weak var searchInputField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.searchInputField.delegate=self
// Do any additional setup after loading the view.
}
@IBAction func searchButtonClicked(_ sender: UIButton) {
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == searchInputField {
print("Changes done in searchTextField")
}
searchInputField.resignFirstResponder() // it hides the keyboard
performAction()
print(" Inside textFieldShouldReturn")
return true
}
func performAction() {
print(" Perform action called")
}
}
我有一个 iOS 应用程序,有一个 UIView
和三个 UITextField
(超过 1 个)
我想了解我的 class ViewController 管理 UITextField
.
- class MainViewController: UIViewController, UITextFieldDelegate ?
我想知道,因为我有不止一个 UITextField
而只有一个 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
最简单的方法是知道在委托方法中使用什么文本字段。 IE。你有 3 个文本字段:field1、field2、field3,当调用委托时你可以检测到要做什么:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if textField == field1 {
// do something
} else if textField == field2 {
// do something
} else if textField == field3 {
// do something
}
return true
}
不要忘记将所有字段的委托设为自己:field1.delegate = self
等
在你的情况下它会工作得很好。
如果你有更多的字段(10、20?),如果你想知道更好的解决方案,请告诉我,我会更新我的答案。
最好的方法是使用 tag
属性。
在 Apple Docs 上看到:
- (void)textFieldDidEndEditing:(UITextField *)textField {
switch (textField.tag) {
case NameFieldTag:
// do something with this text field
break;
case EmailFieldTag:
// do something with this text field
break;
// remainder of switch statement....
}
}
enum {
NameFieldTag = 0,
EmailFieldTag,
DOBFieldTag,
SSNFieldTag
};
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
switch textField {
case field1:
// do something
case field2:
// do something
case field3:
// do something
}
return true
}
这对我有用
import UIKit
class WeatherViewController: UIViewController,UITextFieldDelegate {
@IBOutlet weak var conditionImageView: UIImageView!
@IBOutlet weak var temperatureLabel: UILabel!
@IBOutlet weak var cityLabel: UILabel!
@IBOutlet weak var searchInputField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.searchInputField.delegate=self
// Do any additional setup after loading the view.
}
@IBAction func searchButtonClicked(_ sender: UIButton) {
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == searchInputField {
print("Changes done in searchTextField")
}
searchInputField.resignFirstResponder() // it hides the keyboard
performAction()
print(" Inside textFieldShouldReturn")
return true
}
func performAction() {
print(" Perform action called")
}
}