【问题标题】:iOS swift delegate with more than 1 uitextfield in a uiview在 uiview 中有超过 1 个 uitextfield 的 iOS swift 委托
【发布时间】: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

【问题讨论】:

    标签: ios swift uitextfielddelegate


    【解决方案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")
                   
               }
            
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-28
          • 1970-01-01
          • 2021-03-14
          相关资源
          最近更新 更多