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