Читаем iOS. Приемы программирования полностью

• textFieldShouldClear: — в каждом текстовом поле есть кнопка очистки — обычно это круглая кнопка с крестиком. Когда пользователь нажимает эту кнопку, все содержимое текстового поля автоматически стирается. Если вы предоставляете кнопку для очистки текста, но возвращаете от этого метода значение NO, то пользователь может подумать, что ваша программа не работает. Поэтому в данном случае вы должны отдавать себе отчет в том, что делаете. Если пользователь видит кнопку «Стереть», нажимает ее, а текст в поле не исчезает, это очень плохо характеризует программу.

• textFieldShouldReturn: — вызывается после того, как пользователь нажимает клавишу Return/Enter, пытаясь убрать клавиатуру с экрана. Текстовое поле должно быть присвоено этому методу в качестве активного элемента.

Объединим этот раздел с разделом 1.17 и создадим динамическую текстовую подпись под нашим текстовым полем. Кроме того, отобразим общее количество символов, введенных в текстовое поле. Начнем с файла реализации:


@interface ViewController  

@property (nonatomic, strong) UITextField *myTextField;

@property (nonatomic, strong) UILabel *labelCounter;

@end


@implementation ViewController


Теперь создадим текстовое поле с подписью и нужные нам методы делегата текстового поля. Обойдемся без реализации многих методов UITextFieldDelegate, так как в этом примере они нам не требуются:


— (void) calculateAndDisplayTextFieldLengthWithText:(NSString *)paramText{


NSString *characterOrCharacters = @"Characters";

if ([paramText length] == 1){

characterOrCharacters = @"Character";

}


self.labelCounter.text = [NSString stringWithFormat:@"%lu %@",

(unsigned long)[paramText length],

characterOrCharacters];

}


— (BOOL) textField:(UITextField *)textField

shouldChangeCharactersInRange:(NSRange)range

replacementString:(NSString *)string{


if ([textField isEqual: self.myTextField]){

NSString *wholeText =

[textField.text stringByReplacingCharactersInRange: range

withString: string];

[self calculateAndDisplayTextFieldLengthWithText: wholeText];

}


return YES;


}


— (BOOL)textFieldShouldReturn:(UITextField *)textField{

[textField resignFirstResponder];

return YES;

}


— (void)viewDidLoad{

[super viewDidLoad];


CGRect textFieldFrame = CGRectMake(38.0f,

30.0f,

220.0f,

31.0f);


self.myTextField = [[UITextField alloc]

initWithFrame: textFieldFrame];


self.myTextField.delegate = self;


self.myTextField.borderStyle = UITextBorderStyleRoundedRect;


self.myTextField.contentVerticalAlignment =

UIControlContentVerticalAlignmentCenter;


self.myTextField.textAlignment = NSTextAlignmentCenter;


self.myTextField.text = @"Sir Richard Branson";


[self.view addSubview: self.myTextField];


CGRect labelCounterFrame = self.myTextField.frame;

labelCounterFrame.origin.y += textFieldFrame.size.height + 10;

self.labelCounter = [[UILabel alloc] initWithFrame: labelCounterFrame];

[self.view addSubview: self.labelCounter];


[self calculateAndDisplayTextFieldLengthWithText: self.myTextField.text];


}


Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже