Кажется, я не могу переопределить UITextField метод leftViewRectForBounds - PullRequest
1 голос
/ 17 марта 2011

Общая картина: это то, чего я пытаюсь достичь.Отправить текстовое сообщение кому-то.UI / UX должен выглядеть примерно так: enter image description here

Итак, в настоящее время я использую UITableView с 3 ячейками.Первые два (для "To:" и "From:") имеют высоту 44px.Я поместил UITextField внутри «contentView» UITableViewCell.Все хорошо.Я могу заставить пользователя редактировать содержимое ячейки.

Теперь я использую свойство leftView для отображения UILabel с текстом «Кому:».Это работает, но метка «Кому» всегда находится в самом левом углу UITextField (показано на img ниже): enter image description here

Итак, согласно документации SDK.Режим левого просмотра определяется этим методом: leftViewRectForBounds:

Согласно обсуждению:

Вы не должны вызывать этот метод напрямую.Если вы хотите разместить вид с наложением слева в другом месте, вы можете переопределить этот метод и вернуть новый прямоугольник.

Итак, я попытался переопределить без особого успеха.Если у кого-нибудь есть фрагменты кода, я был бы очень признателен.На нижнем рисунке я установил «От» на «От», что немного «взламывает» его, но я хотел бы сделать это правильно.Это то, что я пробовал:

// override leftViewRectForBounds method:
- (CGRect)leftViewRectForBounds:(CGRect)bounds{
    CGRect leftBounds = CGRectMake(bounds.origin.x + 30, 0, 45, 44);
    return leftBounds;
}

и небольшие варианты, и это, кажется, не работает, поэтому любая помощь приветствуется.Спасибо !!!

Ответы [ 2 ]

4 голосов
/ 17 марта 2011

ваш класс может выглядеть примерно так:

@interface MyTextField : UITextField
{
   //Declare your variable  here    
}
@end

@implementation MyTextFiled

// override leftViewRectForBounds method:
- (CGRect)leftViewRectForBounds:(CGRect)bounds{
    CGRect leftBounds = CGRectMake(bounds.origin.x + 30, 0, 45, 44);
    return leftBounds;
}

Используйте MyTextField вместо UITextField.

0 голосов
/ 17 марта 2011

Если вы не взяли textField в качестве настраиваемого текстового поля, метод не будет вызываться. Чтобы переопределить этот метод, вы должны взять пользовательский класс textField, который наследует UITextField.

...