0

我现在正在编写一个具有 3 UITextFields 的简单应用程序,如果我编辑一个,其他两个应该与它一起扩展。

我尝试使用

-(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
  • 然后调用一个方法来更改其他 2 个的值UITextField

编辑

我可以使用以下内容:

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

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

4

3 回答 3

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;
}
于 2013-09-26T13:27:08.760 回答
0

对于文本字段:

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

 -(void)textFieldDidChange
 {
      //Your Code
 }
于 2013-09-26T13:06:47.677 回答
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退格只是在参数中发送一个空字符串。

于 2013-09-26T13:22:13.557 回答