2016-03-28 75 views
2

我使用下面的代碼使用QLPreviewcontroller展示一些文件在我的應用程序,如何使用swift隱藏QLPreviewController中的共享按鈕?

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是一個簡單的轉換斯威夫特

首先,我們創建QLPreviewController的子類,並在子類中重寫以下方法

編輯

斯威夫特:

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) 

目的-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中的一個問題,看起來可能會修復一個bug。在10之前它被隱藏了。 –

2

這些解決方案都不適用於我的Swift 3 for iOS 10。問題是共享按鈕是在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 )在我的viewDidLayoutSubviews中,我創建了一個虛擬按鈕項來替換分享按鈕:

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

4)當我想在其他VC打開一個文檔,我這樣稱呼它:

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

注:總是這樣調用它,而不是與一個全局變量你實例化,因爲你總是會看到分享按鈕消失之前。

+0

你是天才的男人。它爲我工作。萬分感謝。 –

+0

雖然iPad在iPad上效果很好,但iPhone上的分享按鈕並不是在nabber上,而是在底部。任何想法如何刪除?我試圖刪除工具欄按鈕,但分享按鈕仍然存在 – spaceMonkey

+0

另一個解決方案,這對我很好,是創建自己的VC,並添加作爲子視圖的QLPreviewController的視圖,所以你擺脫了共享按鈕:) –