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?
Odpowiedz
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.
Dzięki. Działa tylko wtedy, gdy setRightBarButtonItem: nil w "viewDidAppear" –
-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
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
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.
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self navigationItem].rightBarButtonItems = nil;
}
działa na mnie zamiast [[self navigationItem] setRightBarButtonItem:nil];
Działa również dla mnie, ale strzałki obok i przycisk prev dziwnie znikają, pozostawiając dwa czarny pusty przycisk. –
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:
- stworzyć nową klasę
UIViewController
- dodać widok
QLPreviewController
do nowej klasy
Wydaje przewodowy ale działa.
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ć!
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
}
rozwiązania dla iOS6, spójrz tutaj: http://stackoverflow.com/questions/13083546/qlpreviewcontroller-hide-print-button-in-ios6 – Krumelur
praca dobrze dla mnie używając Xcode 8.3 https: // stackoverflow .com/a/45344701/1603380 – Buntylm