iOS. Приемы программирования - стр. 60
>self.myTextView.contentInset = UIEdgeInsetsZero;
>}
>– (void) viewWillAppear:(BOOL)paramAnimated{
>[super viewWillAppear: paramAnimated];
>[[NSNotificationCenter defaultCenter]
>addObserver: self
>selector:@selector(handleKeyboardDidShow:)
>name: UIKeyboardDidShowNotification
>object: nil];
>[[NSNotificationCenter defaultCenter]
>addObserver: self
>selector:@selector(handleKeyboardWillHide:)
>name: UIKeyboardWillHideNotification
>object: nil];
>self.myTextView = [[UITextView alloc] initWithFrame: self.view.bounds];
>self.myTextView.text = @"Some text here…";
>self.myTextView.font = [UIFont systemFontOfSize:16.0f];
>[self.view addSubview: self.myTextView];
>}
>– (void) viewWillDisappear:(BOOL)paramAnimated{
>[super viewWillDisappear: paramAnimated];
>[[NSNotificationCenter defaultCenter] removeObserver: self];
>}
В этом коде начинаем наблюдать за клавиатурными уведомлениями в методе viewWillAppear: и прекращаем слушать их в методе viewWillDisappear:. Важно убрать контроллер вида из списка слушателей, так как вы, вероятно, не хотите получать клавиатурные уведомления, инициируемые контроллером другого вида. Случается, что и при работе в фоновом режиме контроллер вида должен получать уведомления, но это бывает редко. Как правило, нужно прекращать слушание уведомлений в методе viewWillDisappear:. Мне не раз доводилось видеть, как программисты портят хорошие приложения, пренебрегая этой простой логикой.
Если вы намереваетесь изменять структуру пользовательского интерфейса, когда клавиатура выводится на экран и когда она с него убирается, то вам никак не обойтись без слушания клавиатурных уведомлений. Сообщения делегата UITextField запускаются всякий раз, когда начинается редактирование текстового поля, независимо от того, есть ли в этот момент на экране клавиатура. Не забывайте, что пользователь может подключить к устройству iOS беспроводную клавиатуру (с помощью Bluetooth). С этой клавиатуры он сможет редактировать содержимое текстовых полей, а также любых других информационных объектов вашего приложения. При подключении клавиатуры по Bluetooth виртуальная клавиатура на экране отображаться не будет. И если в вашем приложении пользовательский интерфейс станет обязательно перестраиваться, как только начинается ввод данных с клавиатуры, то при подключении беспроводной клавиатуры по Bluetooth такая перестройка окажется ненужной.
Теперь, если пользователь попытается ввести какой-либо текст в текстовый вид, клавиатура «выплывет» на экран снизу, и мы присвоим значение высоты клавиатуры в качестве нижней границы содержимого текстового вида. Таким образом, текстовый вид уменьшится в размерах и пользователь сможет вводить в него столько текста, сколько потребуется, – клавиатура не будет заслонять текст.
1.21. Добавление кнопок в пользовательский интерфейс с помощью UIButton
Постановка задачи
Необходимо отобразить в пользовательском интерфейсе кнопку и обрабатывать события касания, связанные с этой кнопкой.
Решение
Воспользуйтесь классом UIButton.
Обсуждение
Кнопки позволяют пользователям инициировать в приложениях те или иные действия. Например, пакет настроек iCloud в приложении Settings (Настройки) содержит кнопку Delete Account (Удалить учетную запись) (рис. 1.57). Если нажать эту кнопку, в приложении iCloud произойдет действие. Оно зависит от конкретного приложения. Не все приложения действуют одинаково, если пользователь нажимает в них кнопку Delete (Удалить). Как мы вскоре увидим, на кнопках могут присутствовать как изображения, так и текст.