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

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

Ответ 1

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

Я изменяю базовый класс 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

Ответ 2

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

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

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

Ответ 3

Чтобы изменить текст кнопки "Почта", выберите "Быстрое решение", которое, скорее всего, пройдет проверку (оставьте, я еще не пробовал). Сделайте это в подклассе 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
        }
    }
}

Ответ 4

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

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

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