2011-08-02 14 views
8

Czy ktoś może mi powiedzieć, jak usunąć przycisk drukowania QLPreviewController? Również chciałbyś wyłączyć wycinanie/wklejanie/kopiowanie.Jak wyłączyć przycisk drukowania QLPreviewController?

+0

rozwiązania dla iOS6, spójrz tutaj: http://stackoverflow.com/questions/13083546/qlpreviewcontroller-hide-print-button-in-ios6 – Krumelur

+0

praca dobrze dla mnie używając Xcode 8.3 https: // stackoverflow .com/a/45344701/1603380 – Buntylm

Odpowiedz

6

UPDATE:

To już nie działa w iOS 6. Quick Look działa w innym procesie za pomocą XPC. Zobacz [tutaj] [3] po więcej szczegółów. Nie przewiduję żadnego sposobu dostosowania QLPreviewController. Poniższa odpowiedź pozostaje dla wszystkich zainteresowanych do wstępnego iOS 6.


Jeśli chcesz po prostu usunąć przycisk akcji Musisz podklasy QLPreviewController. Następnie w -viewWillAppear: musisz usunąć przycisk akcji, wywołując [[self navigationItem] setRightBarButtonItem:nil]; Spowoduje to również usunięcie możliwości udostępniania plików innym aplikacjom. Jeśli nic ci nie grozi, to jest to najłatwiejsze rozwiązanie. Należy pamiętać, że QLPreviewController NIE ma być dostosowywany. Możesz sprawdzić to repository na Github. Zawiera QLPreviewController, który jest już bezpiecznie podklasowany. Trzeba tylko dodać jedną linię, aby usunąć przycisk akcji. Repo ma również inne udogodnienia.

Lepszym, ale bardziej skomplikowanym rozwiązaniem jest użycie UIDocumentInteractionController. Z tego, co rozumiem, QLPreviewController wynika, że ​​został zbudowany przy użyciu UIDocumentInteractionController. QLPreviewController został stworzony do ogólnego użytku i łatwy dodatek. UIDocumentInteractionController daje o wiele więcej kontroli, ale jest trudniejszy w użyciu. Nie mogę opisać w sposób wystarczający, jak go tu użyć. Polecam sprawdzenie sesji WWDC 2010 106 Zrozumienie kontrolera interakcji dokumentów.

Jeśli chodzi o wyłączanie wycinania/kopiowania/wklejania, nie można tego zrobić z QLPreviewController. Możesz to zrobić za pomocą UIDocumentInteractionController, ale nie liczę na to. W zależności od plików, które chcesz wyświetlić, możesz wykonać całkowicie niestandardową implementację, ale to dużo pracy. Oglądanie zwykłego tekstu, zdjęć, filmów i plików PDF jest stosunkowo łatwe. Dokumenty biurowe wymagają więcej wysiłku niż są warte.

EDIT:

I został zbudowany zdolność do usuwania przycisk działania w prawo w RBFilePreviewer więc nie trzeba się martwić o to zrobić samemu.

+0

Dzięki. Działa tylko wtedy, gdy setRightBarButtonItem: nil w "viewDidAppear" –

+1

-viewDidAppear jest dziwnym miejscem do umieszczenia tego. Czy działa w -viewWillAppear? Byłoby znacznie lepiej, jeśli to możliwe. Czy zamierzasz przyjąć/zaakceptować moją odpowiedź jako poprawną? – rbrown

+1

Okazuje się, że usunięcie przycisku akcji nie jest tak banalne, jak myślałem. QLPreviewController ma wiele dziwactw pod spodem. RBFilePreviewer ma teraz wbudowaną tę funkcję i zajmuje się wszystkimi różnymi przypadkami. Dodatkowo naprawiłem błąd w oryginalnym kontrolerze QLPreview, który powodował, że nie wyświetlał paska nawigacyjnego dokumentu, gdy został naciśnięty zamiast prezentowania go modalnie. Możesz również zobaczyć demo RBFilePreviewer w moim repozytorium demo: https://github.com/rob-brown/Demos. – rbrown

2

Jeśli podklasy QLPreviewController a następnie dodać tę jedną metodę:

-(void)viewDidAppear:(BOOL)animated{ 

    [[self navigationItem] setRightBarButtonItem:nil]; 
} 

w podklasie, przycisk działania zniknie powyżej jako rbrown notatki. To nie zadziała, jeśli użyjesz viewWillAppear. Ponadto, nieoczekiwanym efektem ubocznym tego jest to, że pasek narzędzi w podglądzie pojawia się teraz cały czas, a nie tylko po dotknięciu widoku.

+0

To nie działa, tak jak poprzednia odpowiedź od Neogene Sparanza, w przypadku, gdy masz wiele dokumentów do podglądu - wszystko zmienia się jak przedtem po zmianie dokumentu – DisableR

+0

To nie działa na iOS 8 GM Seed – Meet

2
-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    [self navigationItem].rightBarButtonItems = nil; 
} 

działa na mnie zamiast [[self navigationItem] setRightBarButtonItem:nil];

+0

Działa również dla mnie, ale strzałki obok i przycisk prev dziwnie znikają, pozostawiając dwa czarny pusty przycisk. –

1

Muszę również niestandardowy element navigaiton z QLPreviewController. Tak jak w przypadku rbrown, XPC jest używany i nie możemy już dodawać niestandardowych elementów w viewDidLoad lub viewWillAppear.

Obecnie używam w ten sposób:

  1. stworzyć nową klasę UIViewController
  2. dodać widok QLPreviewController do nowej klasy

Wydaje przewodowy ale działa.

0

rozwiązać ten problem w ten sposób:

UIView *viewPreviewController; //from storyboard 

QLPreviewController *previewController = [[QLPreviewController alloc] init]; 
previewController.delegate = self; 
previewController.dataSource = self; 
previewController.currentPreviewItemIndex = 0; 
[previewController.view setFrame:CGRectMake(0,0, self.viewPreviewController.frame.size.width, self.viewPreviewController.frame.size.height)]; 
[previewController.navigationController setHidesBarsOnTap:YES]; 
previewController.navigationItem.rightBarButtonItems = nil; 

[self.viewPreviewController addSubview:previewController.view]; 

Gdybym nie włączenie previewController w UIView, to nie będzie działać!

0

Znalazłem rozwiązanie, aby wyłączyć rightBarButtonItem w QLPreviewController że działa dobrze dla mnie w systemów iOS 8 i iOS9

Wystarczy podklasy QLPreviewController i zastąpić następującymi metodami, a następnie użyć podklasy zamiast oryginalnego QLPreviewController

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // When coming back from background we make sure the share button on the rightbBarButtonItem is disabled 
    __weak typeof(self) weakSelf = self; 
    [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 
     weakSelf.navigationItem.rightBarButtonItem.enabled = NO; 
    }]; 
} 

- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    self.navigationItem.rightBarButtonItem.enabled = NO; // Disable the share button 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    self.navigationItem.rightBarButtonItem.enabled = NO; // Disable the share button 
}