0

私はこれまでで最も奇妙なバグ (私のアプリまたは IOS 7.1 のイーサ) に直面しています。何時間もかけて、問題を示す簡単なアプリを作成することができました。

2 つの UITextField - インターフェイス ビルダーからドラッグ アンド ドロップし、t1、t2 に接続します。ビューコントローラー:

@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 を同時にタップすると、両方の textFields がエンドレス ループでファーストレスポンダーになります! PerformSelector ステートメントまたは textField:shouldChangeCharactersInRange: 実装を省略すると、問題はなくなります。

誰かがなぜそれが起こるのか説明できますか?

4

2 に答える 2

1

編集: また、それぞれの ExclusiveTouch プロパティをUITextFieldYES に設定して、同時に編集できないようにします。

- (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;
}
于 2014-07-12T03:52:55.610 に答える