2016-03-28 4 views
2

Я использую следующий код, чтобы использовать QLPreviewcontroller, чтобы показать некоторые документы в моем приложении,Как скрыть кнопку совместного доступа в QLPreviewController с помощью swift?

let ql = QLPreviewController() 
ql.dataSource = self 
//ql.navigationItem.rightBarButtonItems = nil 
ql.navigationItem.rightBarButtonItem = nil 
presentViewController(ql, animated: true, completion: nil) 

Я не хочу кнопки доли в правой верхней части QLPreviewcontroller. Я попытался установить rightBarButtonItem на ноль, но он не работает.

Как я могу скрыть это?

+0

Возможно, это может помочь: http://stackoverflow.com/questions/22953117/hide-right-button-n-qlpreviewcontroller? – Terry

+0

работать отлично для меня https://stackoverflow.com/a/45344701/1603380 – Buntylm

ответ

1

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

Итак, для любого, кто ищет то же, что и я. Вот мое решение.

коды в Objective-C, но it'l быть простой переход на Swift

Сначала мы создаем подкласс QLPreviewController и в подклассе переопределения следующих методов

Edit

Swift:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    self.navigationItem.rightBarButtonItem = nil 
    //For ipads the share button becomes a rightBarButtonItem 
    self.navigationController?.toolbar?.isHidden = true 
    //This hides the share item 
    self.navigationController?.toolbar?.addObserver(self, forKeyPath: "hidden", options: NSKeyValueObservingOptionPrior, context: nil) 
} 

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 
    self.navigationController?.toolbar?.removeObserver(self, forKeyPath: "hidden") 
} 

override func observeValue(forKeyPath keyPath: String, ofObject object: Any, change: [AnyHashable: Any], context: UnsafeMutableRawPointer) { 
    var isToolBarHidden: Bool? = self.navigationController?.toolbar?.isHidden 
    // If the ToolBar is not hidden 
    if isToolBarHidden == nil { 
     DispatchQueue.main.async(execute: {() -> Void in 
      self.navigationController?.toolbar?.isHidden = true 
     }) 
    } 
} 

self.navigationController?.pushViewController(qlPreviewController, animated: true) 

Objective-C:

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.navigationItem.rightBarButtonItem = nil; //For ipads the share button becomes a rightBarButtonItem 
    [[self.navigationController toolbar] setHidden:YES]; //This hides the share item 
    [[self.navigationController toolbar] addObserver:self forKeyPath:@"hidden" options:NSKeyValueObservingOptionPrior context:nil]; 
} 

Удалить наблюдатель на viewWillDisappear

-(void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [[self.navigationController toolbar] removeObserver:self forKeyPath:@"hidden"]; 
} 

и метод наблюдателя: Обязательно, потому что, когда вы одним нажатием изображение, чтобы скрыть панель навигации и панель инструментов, кнопка часть снова становится видимым на кране.

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 

    BOOL isToolBarHidden = [self.navigationController toolbar].hidden; 
    // If the ToolBar is not hidden 
    if (!isToolBarHidden) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [[self.navigationController toolbar] setHidden:YES]; 
     }); 
    } 
} 

И PreviewController должен быть выдвинут от вас существующих navigationController

[self.navigationController pushViewController:qlPreviewController animated:YES]; 

А также мы должны использовать подкласс вместо QLPreviewController.

+0

Работает для меня. Вы нашли способ скрыть всю панель инструментов? Это только скрывает значок ресурса. –

+0

Здесь есть сообщение здесь [ссылка] (http://stackoverflow.com/questions/15811834/qlpreviewcontroller-hide-bottom-toolbar). Удаляет панель инструментов, но кнопка совместного доступа становится видимой. Проверьте это, и если вы придумаете решение, отправьте свое решение. –

+0

Это только проблема в ios 10, кажется, ошибка, которая будет исправлена. До 10 он скрыт. –

2

Ни один из этих решений не работал для меня в Swift 3 для iOS 10. Проблема заключается в том, что кнопка Share создается после метода viewDidAppear.

Вот шаги, которые я затем удалить кнопку Отправить:

1) подклассы мой QLPreviewController

2) Создан способ открыть документ в этом подклассе:

func show(controller: UIViewController, url: NSURL) { 
    // Refreshing the view 
    self.reloadData() 
    // Printing the doc 
    if let navController = controller.navigationController { 
     navController.pushViewController(self, animated: true) 
    } 
    else { 
     controller.show(self, sender: nil) 
    } 
} 

3) В моем представленииDidLayoutSubviews я создал элемент фиктивной кнопки для замены кнопки совместного доступа:

override func viewDidLayoutSubviews() { 
    navigationItem.rightBarButtonItems?[0] = UIBarButtonItem() 
} 

4) Когда я хочу, чтобы открыть документ в другом VC, я называю это так:

QLSubclass().show(controller: self, url: path as NSURL) 

Примечание: Всегда называть его таким образом, а не с глобальной переменной, проиллюстрированный, потому что вы всегда будете видеть кнопку до ее исчезновения.

+0

Ты гениальный человек.! Это сработало для меня. Благодаря тонну. –

+0

Хотя это отлично работает на iPad .. кнопка совместного доступа на iPhone не на nabber, а на дне. Любая идея, как удалить это? Я попытался удалить кнопку панели инструментов, но кнопка общего доступа все еще остается – spaceMonkey

+0

Другим решением, которое отлично подойдет для меня, является создание собственного VC и добавление в качестве подзаголовка представления QLPreviewController в нем, поэтому вы избавляетесь от общего ресурса кнопка :) –

Смежные вопросы