Ширина проблема в UITextField с настраиваемым rightView

У меня есть UITextField (помещенный внутри UITableViewCell ), у которого есть UIButton в качестве настраиваемого rightView :

    UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(10.0, 1.0, cell.bounds.size.width - 20.0, 31.0)] autorelease];
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.bounds = CGRectMake(0.0, 0.0, 27.0, 31.0); // Probably not needed, doesn't change anything
    button.frame = CGRectMake(0.0, 0.0, 27.0, 31.0);
    [button setImage:[UIImage imageNamed:@"27x31.png"] forState:UIControlStateNormal];
    textField.rightView = button;                                
    textField.rightViewMode = UITextFieldViewModeUnlessEditing;

Когда отображается текстовое поле, касания не обрабатываются должным образом:

  • Если я касаюсь кнопки, она срабатывает.
  • Если я касаюсь области, близкой к левому краю кнопки (но не рядом с его границами), кнопка все еще срабатывает.
  • Если я хочу отредактировать текст в текстовом поле, а не нажимать кнопку, мне нужно нажать левее.

Ситуация ухудшается, если я перевожу устройство в альбомный режим. В этом случае область слева от кнопки, которая все еще запускает кнопку, шире, а слева от этой области есть пробел, который ничего не делает - кнопка не запускается, и текст не редактируется.В этой ситуации мне нужно сдвинуться значительно влево, чтобы отредактировать текст.

Это происходит только в том случае, если текущий текст в поле короткий. Если текст заполняет текстовое поле, касания обрабатываются должным образом (касания в любом месте слева от кнопки редактируют текст как в портретной, так и в альбомной ориентации).

Я попытался переопределить textRectForBounds , editRectForBounds и rightViewRectForBounds . Я проверил, что они вызываются и возвращают правильные значения, но ничего не меняют (пока возвращаемые значения верны).

Есть идеи?

5
задан Amiram Stark 1 February 2012 в 17:54
поделиться