суббота, 9 августа 2014 г.

Решение задач в XCode. Задача 1. Спрятать клавиатуру.

И снова здравствуйте!

Начинаем решать наиболее часто возникаемую задачу - как убрать клавиатуру после завершения ввода?

Решений данной задачи существует довольно много, и их легко найти. Я же опишу именно те, которые показались мне наиболее простыми и удобными.

Способ первый. Использовать имеющуюся на клавиатуре кнопку Done (она же Return Key в Инспекторе Атрибутов текстового поля).



1. Добавление кода в файл заголовка .h

Создайте Outlet соединение нужного текстового поля:

#import <UIKit/UIKit.h>


@interface YCCCarLoanTableViewController : UITableViewController

@property (strong, nonatomic) IBOutlet UITextField *carWorthTextField;


Создайте Action соединение данного текстового поля и выберите тип  события "Did End On Exit"

- (IBAction)carWorthTextEndEditing:(UITextField *)sender;


2. Добавление кода в файл реализации .m

После создания соединения Action в файле реализации автоматически будет добавлен метод

- (IBAction)carWorthTextBeginEditing:(UITextField *)sender{
}

Добавьте в реализацию этого метода следующий код:

- (IBAction)carWorthTextBeginEditing:(UITextField *)sender{

    [sender resignFirstResponder];
}
После запуска программы можете проверить, что клавиатура уходит при нажатии на кнопку возврата.

Способ второй. Настройка прикосновения к фону. Этот способ может пригодиться тем, кто использует клавиатуры без кнопки возврата (например, Decimal Pad). Не работает с UITableView.

1. Работа в Interface Builder

Используя Identity Inspector измените класс своего UIView на UIControl
Это позволит вам создать соединение Action для Вашего View.

2. Добавление кода в файл заголовка .h

Создайте Action соединение для View (как и обычно зажимаете клавишу ctrl и клавишу мыши или тач-панели и ведете соединительную линию к файлу заголовка), выберите тип  события "Touch Up Inside"

- (IBAction)backgroundTap:(UIControl *)sender;

Как и в первом примере, программа сама добавит в файл .m реализацию данного метода

3. Добавление кода в файл реализации .m

Добавьте следующую строку в реализацию данного метода:

- (IBAction)backgroundTap:(UIControl *)sender
{
    [self.carWorthTextField resignFirstResponder];

}

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

Способ третий. Использование InputAccessoryView у текстового поля


Именно этот способ использовался мной при написании кредитного калькулятора. Причиной тому послужила необходимость добавления нескольких кнопок (очистка текстового поля и завершение ввода). В этом методе Вы создаете дополнительный Toolbar с несколькими кнопками над клавиатурой

1. Добавление кода в файл реализации .m

В любом подходящем месте вашего кода (будь-то метод ViewDidLoad или метод Action с типом "Editing Did Begin" у текстового поля) добавьте следующий код создания Toolbar:

UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
numberToolbar.barStyle = UIBarStyleBlackTranslucent; //настройка стиля для панели
numberToolbar.tintColor = [UIColor whiteColor]; // настройка цвета кнопок

//создание массива кнопок
numberToolbar.items = [NSArray arrayWithObjects:[[UIBarButtonItem alloc]initWithTitle:@"Очистить" style:UIBarButtonItemStyleBordered target:self action:@selector(clearField)], // кнопка очистки поля
                           [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], // пустое место для заполнения пространства панели
                           [[UIBarButtonItem alloc]initWithTitle:@"Готово" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],nil];//кнопка завершения ввода

[numberToolbar sizeToFit]; //метод корректного масштабирования панели


self.carWorthTextField.inputAccessoryView = numberToolbar; // применение новой панели к нужному текстовому полю

В результате реализации этого кода, над клавиатурой появится наша панель с кнопками

Теперь необходимо создать методы для обработки селекторов кнопок новой панели

В файл реализации .m добавьте следующие методы:

// завершение ввода
- (void)doneWithNumberPad
{
    [self.carWorthTextField resignFirstResponder]; 

}


//очистка текстового поля
- (void)clearField
{
        self.carWorthTextField.text = @"";

}
Теперь, при нажатии кнопок на панели, будут происходить необходимые действия с текстовым полем

На этом все! Надеюсь, что этими способами помог Вам. 
Если есть вопросы, замечания или пожелания, пишите в комментариях. Пишите также что бы Вы хотели узнать из тех методов, что были мной использованы в кредитном калькуляторе (или других моих программах, когда они будут :-)).

Удачи!

3 комментария: