2011-08-02 58 views
8

任何人都可以告訴我如何刪除QLPreviewController打印按鈕?還想禁用剪切/粘貼/複製。如何禁用QLPreviewController打印按鈕

+0

針對iOS6的一個解決方案,請看這裏:http://stackoverflow.com/questions/13083546/qlpreviewcontroller-hide-print-button-in-ios6 – Krumelur

+0

做工精細用我的Xcode 8.3 https://開頭計算器.com/a/45344701/1603380 – Buntylm

回答

6

UPDATE:

這不再是iOS的6工作快速查找在另一個進程使用XPC運行。有關更多詳細信息,請參見[這裏] [3]。我沒有預見到任何方式來定製QLPreviewController。以下的答案仍然是有興趣的人預的iOS 6


如果你想簡單地刪除您需要繼承QLPreviewController動作按鈕。然後在-viewWillAppear:中,您需要通過調用[[self navigationItem] setRightBarButtonItem:nil];來刪除操作按鈕。這也將刪除與其他應用程序共享文件的功能。如果你對這種損失很好,那麼這是最簡單的解決方案。有一點需要注意的是QLPreviewController不適合定製。你可以在Github上看看這個repository。它包含一個已經安全子類化的QLPreviewController。您只需添加一行即可刪除操作按鈕。回購還有其他一些便利。

更好但更復雜的解決方案是使用UIDocumentInteractionController。從我所瞭解的QLPreviewController是它使用UIDocumentInteractionController建成。 QLPreviewController是一般用途和易於添加。 UIDocumentInteractionController提供了更多的控制,但很難使用。我無法在這裏充分描述如何使用它。我建議查看WWDC 2010會話106瞭解文檔交互控制器。

至於禁用剪切/複製/粘貼,你不能這樣做QLPreviewController。你可以用UIDocumentInteractionController這樣做,但我不會指望它。根據您要顯示的文件,您可能可以完成一個完全自定義的實現,但這是很多工作。爲純文本,照片,視頻和PDF製作觀衆相對容易。 Office文檔比它的價值更努力。

編輯:

我已經建立了刪除操作按鈕直接進入RBFilePreviewer,所以你不必擔心自己動手的能力。

+0

謝謝。只有當我setRightBarButtonItem:nil在「viewDidAppear」 –

+1

-viewDidAppear是一個奇怪的地方,把它。它在-viewWillAppear中工作嗎?如果可能的話,情況會好得多。另外,你是否會正確答覆/接受我的答案? – rbrown

+1

事實證明,刪除操作按鈕並不像我想的那樣微不足道。 QLPreviewController在下面有很多怪癖。 RBFilePreviewer現在內置了該功能,並負責處理所有不同的情況。另外,我在原QLPreviewController中修正了一個「bug」,導致它在推送時不顯示文檔導航欄而不是以模態方式呈現。您還可以在我的演示存儲庫中看到RBFilePreviewer的演示:https://github.com/rob-brown/Demos。 – rbrown

2

如果你繼承QLPreviewController,然後添加這一個方法:在子類

-(void)viewDidAppear:(BOOL)animated{ 

    [[self navigationItem] setRightBarButtonItem:nil]; 
} 

,動作按鈕會消失上面rbrown筆記。如果您使用viewWillAppear,這將不起作用。另外,這樣做的一個意想不到的副作用是,預覽中的工具欄現在總是出現,而不是僅在您點擊視圖時出現。

+0

這不起作用,以及以前的第三方回答Sparanza,如果你有很多預覽文檔 - 在你更改文檔後,所有東西都會變成這樣。 – DisableR

+0

它不適用於iOS 8 GM種子。 – Meet

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

對我的作品,而不是[[self navigationItem] setRightBarButtonItem:nil];

+0

適用於我,但是下一個箭頭和上一個按鈕已經好奇地消失,剩下兩個黑色的空按鈕。 –

1

我還需要定製的QLPreviewController的導覽樹狀項目。就像rbrown所說的那樣,使用XPC,我們不能再在viewDidLoadviewWillAppear中添加自定義項目。

目前我使用這種方式:

  1. 創建一個新類的UIViewController
  2. QLPreviewController視圖添加到新的類

它似乎有線,但工程。

0

我以這種方式解決這個問題:

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]; 

,如果我沒有在一個UIView納入previewController,那就不行!

0

我已經找到了解決禁用QLPreviewControllerrightBarButtonItem在iOS8上和iOS9

爲我工作得很好

你只需要繼承QLPreviewController,並覆蓋下面的方法,然後用你的子類,而不是原來的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 
}