在 uiview 中有超过 1 个 uitextfield 的 iOS swift 委托
Posted
技术标签:
【中文标题】在 uiview 中有超过 1 个 uitextfield 的 iOS swift 委托【英文标题】:iOS swift delegate with more than 1 uitextfield in a uiview 【发布时间】:2015-06-03 20:58:07 【问题描述】:我有一个 ios 应用,有一个 UIView
和三个 UITextField
(超过 1 个)
我想了解我的 ViewController 类管理UITextField
的最佳实践是什么。
- 类 MainViewController: UIViewController, UITextFieldDelegate ?
我想知道,因为我有不止一个UITextField
,而只有一个func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
【问题讨论】:
【参考方案1】:最简单的方法是知道在委托方法中使用什么文本字段。 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?),如果您想知道更好的解决方案,请告诉我,我会更新我的答案。
【讨论】:
10个或20个字段怎么办?您能否更新您的答案。 有没有更好的解决方案?如果有人能写下所有可能的替代方案,那将是最好的。 @anatoliy_v 请写出多个字段的替代方案,这会很有帮助。 @VitaliyLitvinov 在下面回答了对任意数量的字段执行此操作的方法。 @Aashish 我已经在下面回答了一种对任意数量的字段执行此操作的方法。【参考方案2】:最好的方法是使用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
;
【讨论】:
【参考方案3】: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
【讨论】:
【参考方案4】:这对我有用
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")
【讨论】:
以上是关于在 uiview 中有超过 1 个 uitextfield 的 iOS swift 委托的主要内容,如果未能解决你的问题,请参考以下文章
2 个 TextField,在 1 个 UIView 中有 2 个选择器
iOS 通过故事板将 UIView 锁定在导航栏下方和 UITableView 上方
如何检测对 UITableViewCell 的 UIView 的触摸超过一个部分?
Storyboard Constraints 设置 UIImageView 不超过屏幕的 50%