0

クラスを使用してUIDocumentInteractionControllerドキュメントをプレビューしています。プレビューを閉じるための完了ボタンを別のものに変更することはできますか? たとえば、「Done」ではなく「Close」という別のタイトルを設定したいと思います。

4

2 に答える 2

2

[完了] ボタンを [完了] ボタンに変更する 例:

lastObject からナビゲーション項目を取得し、左右のボタンを変更できると読みました。

完了ボタンを変更するには、コントローラーの UIDocumentInteractionController ビューの表示が完了するまで待つ必要があります。残念ながら、それを知る方法はありませんが、次の方法があります。

  • (void)documentInteractionControllerWillBeginPreview:(UIDocumentInteractionController *)コントローラー

これはいつ始まるかを教えてくれます。

私がすること:タイマーを追加し、コントローラーの準備ができたら、ナビゲーションバーの項目ボタンを取得して新しいものに置き換えます。

1) .h で、このデリゲートとタイマーを追加します

.. UIViewController <UIDocumentInteractionControllerDelegate>
@property (nonatomic, strong) NSTimer *timer;

2) .m で

#import "UIView+BK.h"

- (void)documentInteractionControllerWillBeginPreview:(UIDocumentInteractionController *)controller{
        //Start timer
        _timer = [NSTimer scheduledTimerWithTimeInterval:.05
                                                  target:self
                                                selector:@selector(checkNavigationBar)
                                                userInfo:_timer
                                                 repeats:YES]; //YES TO CYCLE
    }

- (void) checkNavigationBar
    {
        //get the last view open (the UIDocumentInteractionController View)
        UIView *lastWindow = [[[[UIApplication sharedApplication] keyWindow ] subviews] lastObject];

        //Find the controller the view belongs too. 
        UIViewController *controller = [lastWindow findViewController];

        if (controller) {
            //find navigation bar using a category
            UINavigationBar *bar = [controller.view navigationBarFromView];

            //get the navigationItem
            UINavigationItem *item = bar.topItem;

            //get the done button
            UIBarButtonItem *doneButton = item.leftBarButtonItem ;

            //Creates the new button
            UIBarButtonItem *newDoneButton = [[UIBarButtonItem alloc ]
                                            initWithTitle:@"Finished"
                                            style:UIBarButtonItemStylePlain
                                            target:doneButton.target
                                            action:doneButton.action];

            //change done button
            item.leftBarButtonItem = newDoneButton;

            //Stop timer
            [_timer invalidate];
            _timer = nil;
        }
    }

3) このカテゴリが必要です

ヘッダー カテゴリ:

輸入

@interface UIView (BK)

- (UIViewController *)findViewController;

- (UINavigationBar *)navigationBarFromView;
@end

実装カテゴリ:

#import "UIView+BK.h"

@implementation UIView (BK)
- (UIViewController *)findViewController {
    Class vcc = [UIViewController class];    // Called here to avoid calling it iteratively unnecessarily.
    UIResponder *responder = self;
    while ((responder = [responder nextResponder])) if ([responder isKindOfClass: vcc]) return (UIViewController *)responder;
    return nil;
}

- (UINavigationBar *)navigationBarFromView {

    for (UIView *subview in self.subviews) {
        if ([subview isKindOfClass:[UINavigationBar  class]]) {
            return (UINavigationBar *)subview;
        }

        UIView *result = [subview navigationBarFromView];
        if (result) {
            return (UINavigationBar *)result;
        }

    }
    return nil;
}
@end
于 2013-01-24T02:40:51.393 に答える