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