Настроить SLComposeServiceViewController всплывающее расширение общего доступа iOS 8

У меня есть встроенное расширение для общего доступа в моем приложении, но я хочу сделать несколько изменений в SLComposeServiceViewController в соответствии с требованиями проекта, например, изменить названия кнопок и установить цвет фона для текстового представления и заголовка. Как это сделать?

4 ответа

Я отвечаю на свой вопрос, может ли кто-нибудь помочь в этом. После многих статей и чтения я придумал следующее решение. Потому что недостаточно контента, чтобы попробовать.

Я изменяю базовый класс SLComposeServiceViewController как UIViewController, чтобы я мог выполнить некоторую настройку. Так как мы знаем, что мы можем добавить всплывающее окно, как evernote, мы также можем применить анимацию к этому всплывающему окну.

Вы можете получить обратный вызов метода post в методе viewddidload вашего viewController.Where вы можете сделать что-то вроде этого:

- (void)viewDidLoad {
 NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
 NSItemProvider *itemProvider = item.attachments.firstObject;
 if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) {
 [itemProvider loadItemForTypeIdentifier:@"public.url"
 options:nil
 completionHandler:^(NSURL *url, NSError *error) {
 NSString *urlString = url.absoluteString;
 NSLog(@"%@",urlString);
 }];
 }
}

Из кода выше вы можете получить ссылку на URL. для получения дополнительной информации, чтобы получить изображение и другие вещи лучше всего ссылаться только на документацию на яблоко.

Документация Apple


Вы можете изменить, например. названия кнопок SLComposeServiceViewController, выполнив следующие действия:

class CustomServiceViewController: SLComposeServiceViewController {
 override func viewDidLoad() {
 let navigationBar = view.subviews.first?.subviews?.last? as? UINavigationBar
 let postButton = navigationBar?.subviews.last? as? ********
 let cancelButton = navigationBar?.subviews.last? as? ********
 postButton?.setTitle("Done", forState: .Normal)
 }
}

Будьте предупреждены - это хрупкое решение, основанное на недокументированных внутренних элементах SLComposeServiceViewController


Чтобы изменить текст кнопки "Почта", выберите "Быстрое решение", которое, скорее всего, пройдет проверку (оставьте, я еще не пробовал). Сделайте это в подклассе SLComposeServiceViewController:

override func viewDidAppear(animated: Bool) {
 super.viewDidAppear(animated)
 // Reset Post button text.
 for item in (self.navigationController?.navigationBar.items)! {
 if let rightItem = item.rightBarButtonItem {
 rightItem.title = "Save"
 break
 }
 }
}


Это работает с Xcode 6.4 и iOS 8.4

-(void)viewDidAppear:(BOOL)animated{
 [super viewDidAppear:animated];
 for(UIView* v in self.navigationController.navigationBar.subviews){
 if(![v isKindOfClass:[******** class]]){
 continue;
 }
 **************** b = (****************)v;
 if([b.title isEqualToString:@"Post"]){
 b.title = @"Save";
 }
 }
}

Отметьте его в viewDidAppear, а не viewDidLoad. Кнопка на самом деле является экземпляром UINavigationButton, однако я передал ее в ***************, который является ее публичным экземпляром. Я не проверял, пройдет ли это через обзор Apple, потому что они могут утверждать, что используют частный API. Если заголовок сообщения будет локализован на других языках, тогда это не сработает, но это не так уж сложно, потому что изменение названия является пурлинным косметическим. Я бы колебался, чтобы изменить название, основанное на его подзадаче, из-за проблемы права налево в некоторых странах, однако одна вещь, которая может быть сделана, - это проверка, выделенная полужирным шрифтом/границей, и это будет кнопка сообщения.

licensed under cc by-sa 3.0 with attribution.