Размер шрифта
-
+

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

Постановка задачи

Необходимо дать пользователю возможность переходить от одного контроллера вида к другому, сопровождая этот процесс плавной анимацией, интегрированной в программу.

Страница 43