2012-02-01 2 views
5

У меня есть UITextField (помещенный внутри UITableViewCell), который имеет UIButton как обычай rightView:Ширина проблемы в UITextField с пользовательским 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, editingRectForBounds и rightViewRectForBounds. Я проверил, что они вызываются и возвращают правильные значения, но они ничего не меняют (пока правильные значения верны).

Любые идеи?

+0

Вы когда-нибудь решали эту проблему? В настоящее время у меня такая же проблема. – AnthonyM

ответ

0

Вы установили какие-либо свойства autoresize в TableViewCell? Попробуйте добавить:

[cell setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 

и TextField и кнопку установить UIViewAutoresizingFlexibleTopMargin вариант, как это:

[textField setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin]; 

[button setAutoresizingMask: UIViewAutoresizingFlexibleTopMargin]; 
+2

Настройка autoResizingMask для UITableViewCell не требуется, она наследуется от UITableView (и я попробовал, без изменений). UITextField уже имеет маску авторезистора (см. Код), и кнопка не должна изменяться, поскольку это кнопка на основе изображения. –

5

У меня была аналогичная проблема с rightView, который, казалось, чтобы предотвратить часть TextField от приема входных данных. Мой правый профиль не был кнопкой, поэтому я просто установил его userInteractionEnabled равным NO, и текстовое поле начало получать штрихи снова по всей его области.

Поскольку у вас есть кнопка, как правая кнопка, это может не сильно помочь. Но еще одно сходство между нашими примерами состояло в том, что оба rightViews имели небольшую ширину. Возможно, RightView не любит иметь ширину < x.

+1

Бинго! Так оно и было. Я потратил навсегда попытку выяснить, что я делаю, чтобы заблокировать ввод (я использовал leftView и leftViewMode). Настройка userInteractionEnabled в моем представлении дополнений, кажется, исправить. Благодаря! – Gujamin