2

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

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

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

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

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

对于这方面的一些指导,我将不胜感激。

4

3 回答 3

6

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

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

- (void)textFieldDidChange:(UITextField *)textField {
}
于 2012-04-30T03:33:38.960 回答
1

因此,如果您有一个 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;   
}
于 2012-04-30T19:14:53.783 回答
0
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
    }}
于 2017-11-10T15:27:15.440 回答