Уроки iPhone SDK: Работа с базовой анимацией на iPhone. Уроки iPhone SDK: Создаем красивые кнопки “glass buttons”
Май 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” значение. Именно поэтому достаточно будет задать текст только для него. После компиляции и запуска кода в центре экрана появится кнопка.

iphone_button

Чтобы кнопка была полезна, нужно понимать, нажата ли она. Сделаем так, чтобы слышать, когда пользователь щелкает по кнопке.

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“.

Вот и все! Теперь у нас есть кнопка, и мы знаем, когда пользователь на нее нажимает!

1 звезда2 звезд3 звезд4 звезд5 звезд (4 голосов, средний: 3.75 из 5)
Загрузка ... Загрузка ...


Оставьте комментарий