iOS. Приемы программирования - стр. 43
>– (BOOL) canPerformWithActivityItems:(NSArray *)activityItems{
>for (id object in activityItems){
>if ([object isKindOfClass: [NSString class]]){
>return YES;
>}
>}
>return NO;
>}
7. Теперь реализуем метод prepareWithActivityItems: нашей функции, чей параметр относится к типу NSArray. Этот метод вызывается, если вы возвращаете YES от метода canPerformWithActivityItems:. Придется сохранить данный массив для последующего использования. Но на самом деле можно сохранять не весь массив, а только часть его объектов – те, что относятся к интересующему вас типу. Например, строки:
>– (void) prepareWithActivityItems:(NSArray *)activityItems{
>NSMutableArray *stringObjects = [[NSMutableArray alloc] init];
>for (id object in activityItems){
>if ([object isKindOfClass: [NSString class]]){
>[stringObjects addObject: object];
>}
>}
>self.activityItems = [stringObjects copy];
>}
8. Последнее, но немаловажное: потребуется реализовать метод performActivity нашей функции, который вызывается, если iOS требует от нас произвести выбранные действия над списком ранее предоставленных произвольных объектов. В функции мы собираемся перебрать массив строковых объектов, извлеченных из массива с произвольными типами, обратить их все и отобразить для пользователя в окне с предупреждением:
>– (NSString *) reverseOfString:(NSString *)paramString{
>NSMutableString *reversed = [[NSMutableString alloc]
>initWithCapacity: paramString.length];
>for (NSInteger counter = paramString.length – 1;
>counter >= 0;
>counter—){
>[reversed appendFormat:@"%c", [paramString characterAtIndex: counter]];
>}
>return [reversed copy];
>}
>– (void) performActivity{
>NSMutableString *reversedStrings = [[NSMutableString alloc] init];
>for (NSString *string in self.activityItems){
>[reversedStrings appendString: [self reverseOfString: string]];
>[reversedStrings appendString:@"\n"];
>}
>UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Reversed"
>message: reversedStrings
>delegate: self
>cancelButtonTitle:@"OK"
>otherButtonTitles: nil];
>[alertView show];
>}
Итак, реализация класса нашей функции завершена. Перейдем к файлу реализации контроллера вида и отобразим контроллер вида функции в списке с нашей специальной функцией:
>#import "ViewController.h"
>#import "StringReverserActivity.h"
>@implementation ViewController
>– (void) viewDidAppear:(BOOL)animated{
>[super viewDidAppear: animated];
>NSArray *itemsToShare = @[
>@"Item 1",
>@"Item 2",
>@"Item 3",
>];
>UIActivityViewController *activity =
>[[UIActivityViewController alloc]
>initWithActivityItems: itemsToShare
>applicationActivities:@[[StringReverserActivity new]]];
>[self presentViewController: activity animated: YES completion: nil];
>}
>@end
При первом запуске приложения на экране появится картинка, примерно такая, как на рис. 1.30.
Рис. 1.30. Специальная функция для обращения строк теперь находится в списке доступных функций
Если теперь вы нажмете в этом списке элемент Reverse String (Обращенная строка), то увидите нечто похожее на рис. 1.31.
Рис. 1.31. Наша функция для обращения строк в действии
См. также
Раздел 1.10.
1.12. Внедрение навигации с помощью UINavigationController
Постановка задачи
Необходимо дать пользователю возможность переходить от одного контроллера вида к другому, сопровождая этот процесс плавной анимацией, интегрированной в программу.