在每次编辑UITextField时调用方法

时间:2013-09-26 12:53:36

标签: ios objective-c uitextfield

我现在正在编写一个有3 UITextField s的简单应用程序,如果我编辑一个,其他两个应该与它一起缩放。

我尝试使用

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

这种方法,但是:

  • 替换字符串是
  • 中输入的最后一个字符
  • 无法弄清楚退格如何在那里工作
  • 有点太早了

如果我可以“修复”第一点(通过发送

[NSString stringWithFormat:@"%@%@", [textField text], string];

作为参数),它不会“修复”第二个点,因为string变量是:

(lldb) po string
(NSString *) $1 = 0x0080cf14 <object returned empty description>

所以问题是:是否有任何方法被称为AFTER textFieldShouldChangeCharactersInRange:?或者有办法:

  • textFieldShouldChangeCharactersInRange:方法
  • 中返回YES
  • 然后调用一个方法来更改另外两个UITextField s?
  • 的值

修改

我可以使用以下内容:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  [self performSelector:@selector(myMethod:) withObject:textField afterDelay:0.1];
  return YES;
}

但它似乎不是最安全的解决方案

3 个答案:

答案 0 :(得分:2)

退格键使用空字符串修改NSRange。您可以做的是修改textField:shouldChange中的三个文本字段,然后将NO返回给方法。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string]; // this is what will happen if you return yes to this method

    anotherTextField.text = // do whatever u need
    yetAnotherTextField.text = // do whatever u need
    return NO;
}

答案 1 :(得分:0)

对于textFields:

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

 -(void)textFieldDidChange
 {
      //Your Code
 }

答案 2 :(得分:0)

以下代码正确打印文本视图的全文(插入了最后一个字符),这有用吗?

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string length])
        NSLog(@"Current Text:%@", [textField.text stringByAppendingString:string]);
    else
        NSLog(@"Current Text:%@", [textField.text substringWithRange:(NSRange){0, [textField.text length]-1}]);
    return YES;
}

退格只是在string参数中发送一个空字符串。