2016-03-28 7 views
2

,QLPreviewController'da paylaşma düğmesi nasıl kullanılır? Benim uygulamasında bazı belgeleri göstermek için QLPreviewcontroller kullanmak için aşağıdaki kodu kullanıyorum

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

Ben QLPreviewcontroller sağ üst paylaşım düğmesini istemiyoruz. 'u sıfırlamaya çalıştım ama işe yaramıyor.

Bunu nasıl gizleyebilirim?

+0

Belki bu yardımcı olabilir: http://stackoverflow.com/questions/22953117/hide-right-button-n-qlpreviewcontroller? – Terry

+0

benim için iyi çalışıyor https://stackoverflow.com/a/45344701/1603380 – Buntylm

cevap

1

Bunun eski bir soru olduğunu biliyorum, ancak bir çözüm aramak için çok fazla zaman harcadım ve işe yarayan bir şey buldum.

Yani, benimle aynı şeyi arayanlar için. İşte benim çözümüm.

Kodlar amaç-c ama

Önce QLPreviewController alt sınıfını oluşturup alt sınıfta aşağıdaki yöntemleri

Edit geçersiz Swift

için

Swift basit dönüşüm olabilir it'l:

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)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [[self.navigationController toolbar] removeObserver:self forKeyPath:@"hidden"]; 
} 

viewWillDisappear

Ve gözlemci yöntemine Observer kaldırın: Gerekli Tekli musluk görüntü gezinme çubuğu ve araç çubuğunu gizlemek için zaman, paylaşma düğmesi musluğu tekrar görünür hale çünkü.
- (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]; 
     }); 
    } 
} 

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

NavigationController

mevcut senden itilmiş zorundadır Ve ayrıca biz yerine QLPreviewController alt sınıfını kullanmak zorunda.

+0

Benim için çalışıyor. Tüm araç çubuğunu da gizlemenin bir yolunu buldun mu? Bu sadece paylaşım simgesini gizler. –

+0

Burada bir yayın var [link] (http://stackoverflow.com/questions/15811834/qlpreviewcontroller-hide-bottom-toolbar). Araç çubuğunu kaldırır, ancak paylaşım düğmesi görünür hale gelir. Kontrol edin ve bir çözüm bulursanız lütfen çözümünüzü gönderin. –

+0

sadece ios 10'da göründüğü bir konu, belki de düzeltilecek bir hata. 10'dan önce gizli. –

2

Bu çözümlerin hiçbiri benim için iOS 3 için Swift 3'te çalıştı. Sorun, ShareDIDAppear yönteminden sonra Paylaş düğmesinin oluşturulmasıdır.

1) subclassed benim QLPreviewController

2) Bu alt sınıfta benim belgeyi açmak için bir yöntem oluşturuldu:

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 İşte

ben paylaşım düğmesini kaldırmak için takip adımlardır) ViewDidLayoutSubviews'ımda, paylaşım düğmesini değiştirmek için bir kukla düğme öğesi oluşturdum:

override func viewDidLayoutSubviews() { 
    navigationItem.rightBarButtonItems?[0] = UIBarButtonItem() 
} 
Başka bir VC bir belgeyi açmak istediğinizde

4), böyle diyoruz:

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

Not: Her zaman göreceksiniz Eğer örneklenmiş çünkü daima global değişkenle bu şekilde diyoruz değil, Paylaşmadan önce paylaşım düğmesi.

+0

Sen deha adamısın! Benim için çalıştı. Bir ton teşekkürler. –

+0

Bu, iPad'de harika çalışıyor ancak iPhone'daki paylaşım düğmesi nabber'de değil, altta. Bunu nasıl kaldıracağınız hakkında bir fikrin var mı? Araç çubuğu düğmesini kaldırmayı denedim ancak paylaşım düğmesi hala – spaceMonkey

+0

kalır Benim için harika bir çözüm, kendi VC'nizi oluşturmak ve içindeki QLPreviewController görünümünü alt görünüm olarak eklemek, böylece paylaşımdan kurtulmak buton :) –

İlgili konular