【问题标题】:How To Update a UILabel as text is being typed in a UITextField如何在 UITextField 中输入文本时更新 UILabel
【发布时间】:2012-04-30 03:28:36
【问题描述】:

这是我在 StackOverflow 上的第一篇文章,我也是 Xcode 和 Objective-C 的新手。 我已经阅读了有关代表的内容,并且还尝试过其他人的代码。但是,我想看看我是否可以自己创建一些使用委托的东西,而无需复制其他人的代码。

为了理解委托,我想要做的是让 UITextField 委托在每次用户在键盘上键入键时更新标签。

我创建了一个 xib 文件并将一个 TextField 连接到我的 .h 文件中的 UITextField *myTextField 和 Label UILabel *myLabel。

我还添加到我的 ViewController 类的 .h 文件中。

但是,我不确定要使用哪种委托方法,因为 UITextFieldDelegate.h 中列出的可选方法似乎只能在编辑完成后更新。另外我不确定是否应该将 AppDelegate 方法放在与我的 xib 或 AppDelegate.h 文件关联的 .h 文件中。

如果能在这方面提供一些帮助,我将不胜感激。

【问题讨论】:

    标签: objective-c xcode uitextfield uilabel uitextfielddelegate


    【解决方案1】:

    您可以将 UIViewController 添加为 UITextField 上的通知观察者,如下所示:

    [textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
    
    - (void)textFieldDidChange:(UITextField *)textField {
    }
    

    【讨论】:

      【解决方案2】:

      因此,如果您有一个 UITextField myTextField 链接到您的 nib IB TextField 对象,并且一个 UILabel myLabel 链接到您的 nib IB Label 对象,并且您已经让您的 Textfield 指向您的文件所有者,那么试试这个看看它是否有帮助。

      我只是快速输入了这个,我没有测试它,所以先检查它是否有错误。

      // ViewController.h
      @interface ViewController : UIViewController <UITextFieldDelegate> {
          IBOutlet UILabel *myLabel;
          IBOutlet UITextField *myTextField;
      }
      @property (nonatomic, retain) UILabel *myLabel;
      @property (nonatomic, retain) UITextField *myTextField;
      @end
      
      
      //  ViewController.m
      - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
      {
          myLabel.text = myTextField.text;
          return YES;   
      }
      

      【讨论】:

      • 这是一种解决方法,而您应该使用UITextInput 协议
      • 这个有applescript objc 版本吗?谢谢
      【解决方案3】:
      import UIKit
      
      class ViewController: UIViewController , UITextFieldDelegate {
          // Create a label Outlet
          @IBOutlet weak var label: UILabel!
          // TextField Outlet
          @IBOutlet weak var textField: UITextField!
         // Select the textfield and in connection inspector drag a action from editing changed to the source code
          @IBAction func changed(_ sender: Any) {
             // Set text to label
              label.text = textField.text
              }
          override func viewDidLoad() {
              super.viewDidLoad()
              //Delegate to self
              textField.delegate = self
              textField.autocorrectionType = .no
          }
          // Implement the protocols
          func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
              return true
          }
          func textFieldShouldReturn(_ textField: UITextField) -> Bool {
             textField.resignFirstResponder()
              return true
          }}
      

      【讨论】:

      • 基本上你需要一个动作和与之对应的协议,如果你想将值设置为实例变量,你可以在 didEndEditing 的动作中完成,但你必须实现code textFieldDidEndEditing `跨度>
      猜你喜欢
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      相关资源
      最近更新 更多