执行选择器时出现了奇怪的问题" selectAll#34;在UITextField上

时间:2014-07-12 03:49:36

标签: ios objective-c uitextfield selectall

我正面临着最恶毒的错误(我应用程序或IOS 7.1中的以太)。 几个小时后,我设法创建了一个演示问题的简单应用程序。

两个UITextField - 从界面构建器拖放并连接到t1,t2。 ViewController:

@implementation ViewController
@synthesize t1;
@synthesize t2;
#pragma mark - UITextFieldDelegate


-(void)textFieldDidBeginEditing:(UITextField *)iTextField {
    NSLog(@"textFieldDidBeginEditing");
    [iTextField performSelector:@selector(selectAll:) withObject:iTextField afterDelay:0.0];
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    return YES;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    t1.delegate = self;
    t2.delegate = self;
}

@end

同时点击t1和t2时,两个textField都成为无限循环中的第一响应者! 当省略了执行器的继承以及textField:shouldChangeCharactersInRange:实现时,问题就消失了。

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

编辑:同时将每个UITextField的exclusiveTouch属性设置为:YES,以防止它们同时进行编辑。

- (void)viewDidLoad
{
    [super viewDidLoad];
    t1.exclusiveTouch = YES;
    t2.exclusiveTouch = YES;
    t1.delegate = self;
    t2.delegate = self;
}

- (void)textFieldDidBeginEditing:(UITextField *)iTextField
{
    [iTextField performSelector:@selector(selectAll:) withObject:nil afterDelay:0.0];
}

或更简单地不使用exclusiveTouch属性:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)iTextField
{
    if (iTextField == t1 && t2.isFirstResponder == NO)
    {
        return YES;
    }
    else if (iTextField == t2 && t1.isFirstResponder == NO)
    {
        return YES;
    }

    return NO;
}