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

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


person iMash    schedule 14.10.2014    source источник
comment
документация должна помочь.   -  person twe4ked    schedule 26.10.2014
comment
Я также ищу дополнительную информацию о настройке SLComposeServiceViewController.   -  person Refael.S    schedule 29.10.2014


Ответы (4)


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

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

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

- (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.

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

person iMash    schedule 29.10.2014
comment
Я думаю, что в той же документации упоминается, что предпочтительнее использовать константы, определенные в MobileCoreServices для типов UTI. что-то вроде: if([currentItem hasItemConformingToTypeIdentifier:(__bridge NSString *)kUTTypeURL]) - person Louis Tur; 23.01.2015

Чтобы изменить текст кнопки «Опубликовать», вот решение Swift, которое, скорее всего, должно пройти проверку (осторожно, я еще не пробовал). Сделайте это в подклассе 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
        }
    }
}
person Will Dinkel    schedule 04.01.2016

Вы можете изменить, например. кнопки заголовков 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.

person average Joe    schedule 14.01.2015

Это работает с 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. Если заголовок поста будет локализован на другие языки, то это не сработает, но это не имеет большого значения, потому что изменение заголовка — чисто косметическое. Я бы не решился изменить заголовок на основе его порядка просмотра из-за проблемы справа налево в некоторых странах, однако одна вещь, которую можно было бы сделать, — это проверить, что выделено жирным шрифтом / с рамкой, и это будет кнопка публикации.

person malhal    schedule 23.07.2015