如何禁用QLPreviewController打印按钮

时间:2011-08-02 20:32:15

标签: ios pdf qlpreviewcontroller

有谁能告诉我如何删除QLPreviewController打印按钮?还想禁用剪切/粘贴/复制。

8 个答案:

答案 0 :(得分:6)

<强>更新

这在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的功能,因此您无需担心自己动手操作。

答案 1 :(得分:2)

如果你继承QLPreviewController,然后添加这个方法:

-(void)viewDidAppear:(BOOL)animated{

    [[self navigationItem] setRightBarButtonItem:nil]; 
}

在子类中,操作按钮将在上面的rbrown笔记中消失。如果您使用viewWillAppear,这将无效。此外,这样做的意外副作用是预览中的工具栏现在始终显示,而不是仅在您点击视图时。

答案 2 :(得分:2)

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

适合我而不是[[self navigationItem] setRightBarButtonItem:nil];

答案 3 :(得分:1)

我还需要自定义QLPreviewController的navigaiton项目。就像rbrown所说的那样,使用了XPC,我们无法再在viewDidLoadviewWillAppear中添加自定义项。

目前我使用这种方式:

  1. 创建一个新类UIViewController
  2. QLPreviewController的视图添加到新课程
  3. 似乎有线但有效。

答案 4 :(得分: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,那么它就行不通了!

答案 5 :(得分:0)

我找到了一个解决方案来禁用rightBarButtonItem中的QLPreviewController,这对我在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
}

答案 6 :(得分:0)

这对我有用。您必须调试子导航控制器

<?php                           
$args2 = array( 'post_type' => 'stockist', 'posts_per_page' => -1 );
$stockistloop2 = new WP_Query( $args2 );
if ( $stockistloop2->have_posts() ): while ( $stockistloop2->have_posts() ): $stockistloop2->the_post();?>
<div class="col-1-1 clearfix nopad stockist-block-dropdown STORE <?php the_title();?>">
    <h2 class="stockist-title"><?php the_title();?></h2>
<?php 
$args = array( 'taxonomy' => 'range');
$categories = get_categories($args);
 if($categories): foreach($categories as $category): $url = get_category_link( $category->term_id ); ?>
    <div class="col-1-5 mobile-col-1-2">
        <h4><?php echo ($category->name) ;?></h4>
        <?php $post_objects = get_field('stocked_range'); if( $post_objects ): ?>
        <ul class="stockist-block-products clearfix">
        <?php foreach( $post_objects as $post_object): $post_terms_array = get_the_terms($post_object, 'range'); $post_term_name = $post_terms_array[0]->slug; 
            if($post_term_name == $category->slug):?>
            <li>
                <a href="<?php echo get_permalink($post_object->ID); ?>" target="_blank"><?php echo get_the_title($post_object->ID); ?></a>
            </li>
            <?php endif; endforeach; ?>
        </ul>
    <?php  endif;?>
    </div>
    <?php endforeach; endif;?>
</div>
<?php endwhile; wp_reset_postdata(); endif; ?>

答案 7 :(得分:0)

该子类与 Swift 4.2 iOS 12 一起使用。它使用技巧来确保隐藏共享图标而不会在用户眼中闪烁。

 <div className="model">
     <div className="modelContent">
         <iframe src="http://www.africau.edu/images/default/sample.pdf" style="width:600px; height:500px;" frameborder="0"></iframe>
     </div>
 </div>