什么是在输入UITextField时获取整个文本的简单方法?

时间:2013-08-30 00:34:32

标签: ios objective-c cocoa-touch uitextfield

当用户输入UITextField时,我需要实时知道文本字段中的整个字符串。我这样做的方法是听一个UITextFieldDelegate回调。此回调的问题在于,在实际插入其他文本之前触发它。由于这个和其他各种角落的情况,我需要编写这个非常复杂的代码。是否有更简单(更少代码)的方式做同样的事情?

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString* entireString = nil;

    if (string.length == 0) {
        // When hitting backspace, 'string' will be the empty string.
        entireString = [textField.text substringWithRange:NSMakeRange(0, textField.text.length - 1)];
    } else if (string.length > 1) {
        // Autocompleting a single word and then hitting enter. For example,
        // type in "test" and it will suggest "Test". Hit enter and 'string'
        // will be "Test".
        entireString = string;
    } else {
        // Regular typing of an additional character
        entireString = [textField.text stringByAppendingString:string];
    }

    NSLog(@"Entire String = '%@'", entireString);

    return YES;
}

1 个答案:

答案 0 :(得分:3)

我甚至不会与代表打交道。只需使用UITextFieldTextDidChangeNotification就可以了解事后的变化。然后您不必担心将更改附加到字符串,您只需访问整个文本。

[[NSNotificationCenter defaultCenter] addObserverForName:UITextFieldTextDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
    NSString *string = someTextFieldReference.text;
}];

或者正如@warpedspeed链接中的答案所指出的那样,您可以为文本字段的编辑更改控件事件添加目标,如下所示:

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


- (void)textFieldDidChange:(UITextField *)sender
{
    NSLog(@"%@",sender.text);
}