|
Май
20
|
В комментариях к одному из предыдущих уроков по программированию на iPhone задавался вопрос о способе создания кнопки и ожидании события “UIControlEventTouchUpInside“. Я решил не добавлять ответ в комментарии, а посвятить ему отдельную статью. Мы не будем прибегать к помощи редактора Interface Builder и создадим нашу кнопку исключительно программными средствами.
Исходный код для начала работы возьмем [этот (Hello world!)]. Начнем с нового window-based приложения с одним подклассом “UIViewController” . Внедренная функция “loadView” даст нам возможность полностью управлять заполнением контроллера представлениями. Чтобы приступить к работе над кнопкой, нам потребуется следующий код:
1 2 3 4 5 6 7 8 9 10 | // Внедряем loadView для создания иерархии представлений программными средствами, // без nib-файла. - (void)loadView { //размещаем представление self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; //настраиваем для него цвет фона self.view.backgroundColor = [UIColor whiteColor]; } |
Здесь мы просто создаем объект представления для “UIViewController“, устанавливая его по размерам экрана и добавляя белый фон. Жестко программировать размеры представления необходимости нет. Класс “UIScreen” располагает собственным методом “mainScreen“, с помощью которого мы получаем доступ к экрану устройства. После мы можем запросить у объекта его “applicationFrame“, который по размерам будет равен экрану iPhone.
Теперь к сути. Приведенный ниже код создаст кнопку с определенным текстом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | // Внедряем loadView для создания иерархии представлений программными средствами, // без nib-файла. - (void)loadView { //размещаем представление self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; //настраиваем для него цвет фона self.view.backgroundColor = [UIColor whiteColor]; //создаем кнопку UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; //указываем позицию кнопки button.frame = CGRectMake(100, 170, 100, 30); //задаем название кнопки [button setTitle:@"Click Me!" forState:UIControlStateNormal]; //добавляем кнопку к представлению [self.view addSubview:button]; } |
Первое, что нам нужно, — создать кнопку. Объект “UIButton” предлагает метод класса “buttonWithType“, автоматически создающий кнопки разного типа. Остановимся на самой обычной кнопке: передаем “UIButtonTypeRoundedRect“. Теперь укажем для нее положение и размер: для свойства “frame” приведены заданные мной предельные значения. Поскольку от кнопки без обозначения пользы мало, задаем ее название посредством “setTitle“. Для каждого состояния текст может быть своим. В отсутствие названия для конкретного состояния будет задействовано указанное для “UIControlStateNormal” значение. Именно поэтому достаточно будет задать текст только для него. После компиляции и запуска кода в центре экрана появится кнопка.

Чтобы кнопка была полезна, нужно понимать, нажата ли она. Сделаем так, чтобы слышать, когда пользователь щелкает по кнопке.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // Внедряем loadView для создания иерархии представлений программными средствами, // без nib-файла. - (void)loadView { //размещаем представление self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; //настраиваем для него цвет фона self.view.backgroundColor = [UIColor whiteColor]; //создаем кнопку UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; //указываем позицию кнопки button.frame = CGRectMake(100, 170, 100, 30); //задаем название кнопки [button setTitle:@"Click Me!" forState:UIControlStateNormal]; //прослушиваем щелчок [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside]; //добавляем кнопку к представлению [self.view addSubview:button]; } -(void)buttonPressed { NSLog(@"Button Pressed!"); } |
С помощью функции “addTarget” мы привязались к событию “UIControlEventTouchUpInside“. Здесь мы предлагаем перенаправлять данное событие на “self” и вызывать функцию “buttonPressed“. Директива “@selector” возвращает то, что в Objective C считается адресной ссылкой на функцию (function pointer) . И, наконец, если мы хотим, чтобы кнопка отправляла сообщение классу, стоит предусмотреть для этого сообщения метод. Мы просто регистрируем сообщение на консоли. Чтобы просмотреть консоль, выберите в меню XCode опцию “Run / Console“.
Вот и все! Теперь у нас есть кнопка, и мы знаем, когда пользователь на нее нажимает!


(4 голосов, средний: 3.75 из 5)
Последние комментарии
Подскажите пожалуйста… Вот...
Код не открывает страницы по простой причине -...