我正面临着最恶毒的错误(我应用程序或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:实现时,问题就消失了。
有人可以解释为什么会这样吗?
答案 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;
}