Статьи

UIActionSheet и UIActionSheetDelegate

В этом руководстве по iOS SDK для начинающих мы расскажем, как реализовать UIActionSheet и UIActionSheetDelegate . Этот класс позволит вам легко запрашивать ввод данных, отображая список пунктов меню.


Запустите Xcode и нажмите « Файл»> «Создать»> «Проект» . Нажмите «Приложение» под панелью iOS слева и нажмите значок «Одно приложение». Нажмите кнопку «Далее».

UIActionSheet: скриншот окна проекта

В поле «Имя продукта» введите «ActionSheetDemo» и введите имя для идентификатора вашей компании, например «com.mobiletuts». Выберите «iPhone» в меню «Семейство устройств». Снимите флажки «Использовать раскадровки» и «Включить юнит-тесты» и установите флажок «Использовать автоматический подсчет ссылок». Нажмите «Далее», выберите место для сохранения вашего проекта и нажмите «Создать».

UIActionSheet: скриншот сохранения проекта

Сначала мы объявляем и определяем метод, который вызовет лист действий. Нажмите на файл «ViewController.m» и добавьте следующее объявление и определение метода:

01
02
03
04
05
06
07
08
09
10
11
12
13
@interface ViewController ()
— (void)showActionSheet:(id)sender;
@end
 
@implementation ViewController
 
 
— (void)showActionSheet:(id)sender
{
}
 

Найдите метод viewDidLoad: в том же файле и добавьте следующий код для программного создания кнопки:

1
2
3
4
5
6
7
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20.0f, 186.0f, 280.0f, 88.0f);
[button setTitle:@»Show Action Sheet» forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
button.tintColor = [UIColor darkGrayColor];
[button addTarget:self action:@selector(showActionSheet:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];

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


Прежде чем мы сможем вызвать любой из методов UIActionSheetDelegate , мы должны соответствовать протоколу UIActionSheetDelegate . Нажмите на файл «ViewController.h» и обновите объявление интерфейса следующим кодом.

1
@interface ViewController : UIViewController <UIActionSheetDelegate>

В соответствии с протоколом ViewController класс ViewController может реализовывать и выполнять необходимые задачи при вызове определенных методов делегата.


В файле «ViewController.m» добавьте следующий метод UIActionSheetDelegate .

1
— (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {}

Существует много методов UIActionSheetDelegate , однако мы будем использовать только один: actionSheet: clickedButtonAtIndex: Это один из наиболее часто используемых методов делегата, так как он вызывается автоматически при нажатии одной из кнопок на листе действий.


Найдите showActionSheet: определение метода, которое мы добавили ранее. Добавьте следующий код внутри фигурных скобок, чтобы создать лист действий с пятью кнопками.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
NSString *actionSheetTitle = @»Action Sheet Demo»;
NSString *destructiveTitle = @»Destructive Button»;
NSString *other1 = @»Other Button 1″;
NSString *other2 = @»Other Button 2″;
NSString *other3 = @»Other Button 3″;
NSString *cancelTitle = @»Cancel Button»;
     
UIActionSheet *actionSheet = [[UIActionSheet alloc]
                              initWithTitle:actionSheetTitle
                              delegate:self
                              cancelButtonTitle:cancelTitle
                              destructiveButtonTitle:destructiveTitle
                              otherButtonTitles:other1, other2, other3, nil];
     
[actionSheet showInView:self.view];

Как видно из названия, лист действий предоставляет пользователю различные варианты выбора и соответствующие действия, которые могут быть выполнены. В первой части метода мы создаем шесть строк, одна из которых представляет заголовок листа действий, а пять — заголовки кнопок в листе действий. Следующая часть создает экземпляр листа действий с конкретными параметрами. Эти параметры включают заголовок для листа действий, объект, который будет делегатом (в данном случае self , объект UIViewController ), и различные кнопки, которые будут отображаться в листе действий.

В листе действий есть три основных типа кнопок. cancelButtonTitle: отменяет лист действий. The destructiveButtonTitle: уничтожает или удаляет что-то; эта кнопка по умолчанию красная на листе действий. otherButtonTitles: может быть любым и часто предлагает опцию, например, viewController к новому viewController . Чтобы пропустить одну из кнопок, просто передайте nil в качестве аргумента для названия этой кнопки. Последняя часть метода, showInView: показывает лист действий в указанном представлении.


Вернитесь к методу делегата actionSheet: clickedButtonAtIndex: Добавьте следующий код, чтобы определить, какая кнопка была нажата:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
//Get the name of the current pressed button
NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];
     
if ([buttonTitle isEqualToString:@»Destructive Button»]) {
    NSLog(@»Destructive pressed —> Delete Something»);
}
if ([buttonTitle isEqualToString:@»Other Button 1″]) {
    NSLog(@»Other 1 pressed»);
}
if ([buttonTitle isEqualToString:@»Other Button 2″]) {
    NSLog(@»Other 2 pressed»);
}
if ([buttonTitle isEqualToString:@»Other Button 3″]) {
    NSLog(@»Other 3 pressed»);
}
if ([buttonTitle isEqualToString:@»Cancel Button»]) {
    NSLog(@»Cancel pressed —> Cancel ActionSheet»);
}

При нажатии кнопки вызывается actionSheet: clickedButtonAtIndex: Мы получаем имя нажатой кнопки и сравниваем его с различными названиями кнопок на листе действий, чтобы определить, какая кнопка была нажата. NSLog с каждым оператором if будет регистрировать, какая кнопка была нажата на консоли.


Нажмите Product> Run, чтобы построить и запустить проект в симуляторе. Нажмите «Показать лист действий», чтобы открыть лист действий. Откройте консоль, нажав View> Debug Area> Activate Console в Xcode . Нажмите на одну из кнопок листа действий, чтобы увидеть соответствующий журнал в консоли.


UIActionSheet обычно используется, чтобы предложить пользователю много вариантов. Экспериментируя с UIActionSheet , вы сможете найти конфигурацию, которая соответствует потребностям вашего приложения. Вопросы или комментарии? Не стесняйтесь оставлять их в разделе комментариев или отправлять их напрямую через Twitter @aaron_crabtree.