— (UIImage *) activityImage{
return [UIImage imageNamed:@"Reverse"];
}
Рис. 1.29.В категории Ресурсы содержатся изображения для создаваемой специальной функции
6. Реализуем метод canPerformWithActivityItems: нашей функции. Параметр этого метода содержит массив, который будет задан, когда метод-инициализатор контроллера вида с функцией получит массив компонентов функции. Не забывайте, что тип каждого из объектов данного массива является произвольным. Возвращаемое значение данного метода является логическим и указывает, можем ли мы произвести такую функцию над каждым конкретным элементом массива. Например, наша функция может обратить любое количество данных ей строк. То есть если мы найдем в массиве одну строку, это будет нам на руку, поскольку мы будем точно знать, что впоследствии сможем обратить эту строку. Но если мы получим массив из 1000 объектов, ни один из которых не будет относиться к приемлемому для нас типу, мы отклоним такой запрос, вернув NO от данного метода:
— (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
Необходимо дать пользователю возможность переходить от одного контроллера вида к другому, сопровождая этот процесс плавной анимацией, интегрированной в программу.
Читать дальше
Конец ознакомительного отрывка
Купить книгу