Добро пожаловать в этот быстрый совет начального уровня о работе с листами действий.  Из этого руководства вы узнаете, как динамически создавать простую таблицу действий с использованием содержимого из массива.  Этот метод позволит вам определить, сколько кнопок нужно разместить на листе действий во время выполнения, а не во время компиляции.  Удобная техника, чтобы иметь! 
В этом уроке мы создадим простое приложение, которое покажет нам список фруктов на листе действий. Если вы выберете фрукт, текст метки будет обновлен с выбранным фруктом.
Шаг 1: Создание проекта
Откройте Xcode и выберите «Создать новый проект Xcode». Выберите «Single View Application» и нажмите «Next». Введите имя для своего проекта (я назвал его «Фрукты»), убедитесь, что вы выбрали iPhone для «Устройств» и отметили флажки «Использовать раскадровки» и «Использовать автоматический подсчет ссылок». После этого нажмите «Далее» и выберите место для сохранения вашего проекта, прежде чем нажать «Создать».

Шаг 2. Установка поддерживаемых ориентаций
Мы хотим использовать это приложение только в портретном режиме, поэтому перейдите в раздел «Поддерживаемые ориентации интерфейса» и отмените выбор ориентации ландшафта.

Шаг 3: Создание интерфейса
Откройте раскадровку и перетащите метку из библиотеки объектов в контроллер вида. Разместите его в верхней части View Controller и убедитесь, что он центрирован и имеет ширину 280 пикселей. Откройте инспектор атрибутов и измените выравнивание по центру. Наконец, удалите текст.
Затем перетащите кнопку из библиотеки объектов на контроллер вида и поместите ее чуть ниже метки. Дважды щелкните по его названию и измените его на «Фрукты».

Шаг 4. Создание соединений IBOutlet
Откройте ViewController.m и измените код следующим образом:
| 01 02 03 04 05 06 07 08 09 10 | #import «ViewController.h» @interface ViewController () <UIActionSheetDelegate> @property(nonatomic, weak) IBOutlet UILabel *fruitLabel; @property(nonatomic, strong) NSMutableArray *fruits; — (IBAction)showFruits:(id)sender; @end | 
Здесь мы создаем выход для нашей этикетки, изменяемый массив для хранения наших фруктов, и мы создаем действие, чтобы показать лист действий. Мы также добавили UIActionSheetDelegate , чтобы мы могли обновить метку, когда вы выбираете фрукт из листа действий. Обратите внимание, что все это было сделано в расширении класса, потому что ни одно из этих свойств или методов не должно быть доступно внешнему классу.
 Теперь, когда мы создали розетку и действие, нам нужно только соединить их с соответствующими элементами.  Откройте раскадровку и соедините розетку fruitsLabel с ярлыком и showFruits: action.  Выберите Touch Up Inside в качестве управляющего события для кнопки. 
Шаг 5: Создайте список фруктов
Откройте ViewController.m и создайте следующий метод инициализатора:
| 1 2 3 4 5 6 7 | -(id) initWithCoder:(NSCoder *)aDecoder{     if (self = [super initWithCoder:aDecoder]) {         self.fruits = [[NSMutableArray alloc] initWithObjects:@»Apple», @»Orange», @»Banana», @»Strawberry», @»Peach»,nil];     }         return self; } | 
Здесь мы создаем наш массив фруктов и храним в нем несколько фруктов.
Шаг 6: Показать список
  Добавьте следующий код ниже метода didReceiveMemoryWarning : 
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 | — (IBAction)showFruits:(id)sender {     UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@»Select a fruit»                                                              delegate:self                                                     cancelButtonTitle:nil                                                destructiveButtonTitle:nil                                                     otherButtonTitles:nil];         for (NSString *fruit in self.fruits) {         [actionSheet addButtonWithTitle:fruit];     }         actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@»Cancel»];         [actionSheet showInView:self.view]; } | 
Сначала мы создаем лист действий, как вы обычно делаете. Мы даем ему название и делегата, но мы не добавляем никаких кнопок, даже кнопки отмены. Если бы мы добавили сюда кнопку отмены, а все остальные кнопки позже, кнопка отмены была бы вверху списка, а не внизу.
Далее мы используем цикл быстрого перечисления, чтобы просмотреть все фрукты, хранящиеся в массиве фруктов, созданном ранее. В этом цикле мы добавляем кнопки для всех фруктов на лист действий. После цикла for мы добавляем кнопку отмены на лист действий. Как видите, мы делаем это, добавляя кнопку с заголовком «Отмена» в cancelButtonIndex . Таким образом, лист действий знает, что кнопка «Отмена» должна быть внизу списка. Наконец, мы показываем лист действий нормальным способом.
Шаг 7: Обновите этикетку с фруктами
  Добавьте следующий метод протокола делегата листа действия ниже showFruits: action: 
| 1 2 3 4 5 6 | — (void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {     if (buttonIndex != actionSheet.cancelButtonIndex) {         self.fruitLabel.text = [self.fruits objectAtIndex:buttonIndex];     } } | 
Этот метод делегата вызывается при нажатии кнопки на листе действий. Сначала мы проверяем, нажата ли кнопка для фруктов или кнопка отмены. Мы делаем это, сравнивая выбранный индекс кнопки с индексом кнопки отмены. Если выбранная кнопка предназначена для фруктов, мы обновляем этикетку с выбранными фруктами.
Заворачивать
Спасибо, что прочитали этот быстрый совет о создании листа действий с элементами из массива. Я надеюсь, что вы сочли полезным! Если у вас есть вопросы или комментарии к этому совету, оставьте их в разделе комментариев ниже.