Вандад Нахавандипур

iOS. Приемы программирования


Скачать книгу

YES];

      }

      3. Далее переопределим метод activityType нашей функции. Возвращаемое значение этого метода представляет собой объект типа NSString, являющийся уникальным идентификатором этой функции. Это значение не будет отображаться для пользователя – оно применяется только на уровне системы iOS для отслеживания идентификатора функции. Нет никаких особых значений, которые требовалось бы возвращать от этого метода, нет также никаких сопутствующих рекомендаций от Apple, но мы будем работать со строками в формате «обратное доменное имя», использовать идентификатор пакета приложения и прикреплять к нему имя нашего класса. Итак, если имеется идентификатор пакета com.pixolity.ios.cookbook.myapp и класс с именем StringReverserActivity, то мы возвратим от этого метода строку com.pixolity.ios.cookbook.myapp.StringReverserActivity, вот так:

      – (NSString *) activityType{

      return [[NSBundle mainBundle].bundleIdentifier

      stringByAppendingFormat:@".%@", NSStringFromClass([self class])];

      }

      4. Следующий метод, который придется переопределить, называется activityTitle. В нем мы собираемся возвращать строку, которую будем отображать для пользователя в контроллере вида с функцией. Необходимо, чтобы эта строка получилась не слишком длинной и уместилась в нашем контроллере вида:

      – (NSString *) activityTitle{

      return @"Reverse String";

      }

      5. Переходим к методу activityImage, который должен возвращать нам экземпляр UIImage – то самое изображение, что будет выводиться в контроллере вида с функцией. Обязательно предоставляйте по два варианта изображения – для сетчаточного дисплея и для обычного – как для iPad, так и для iPhone/iPod. Разрешение сетчаточного изображения для iPad должно составлять 110 × 110 пикселов, а для iPhone – 86 × 86 пикселов. Неудивительно, что, разделив эти значения на 2, получим ширину и высоту обычных изображений. В этом изображении iOS использует только альфа-канал, поэтому убедитесь, что фон вашего изображения является прозрачным и что вы иллюстрируете его черным или белым цветом. Я уже создал изображение в разделе с ресурсами моего приложения и назвал его Reverse (Обратное). Вы можете ознакомиться с ним на рис. 1.29. А вот и код:

      – (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. Теперь