バー ボタン アイテムから表示する場合、通常、アクション シートが閉じられるまで、ツールバーの他のすべてのボタンを無効にする必要があります。
これを行う最も簡単な方法は、UIToolbar クラスを変更することだと思います。おそらくアプリデリゲートに保存することで、アクションシートを取得する方法が必要になります。
次のように、ファイル UIToolbar+Modal.m を作成します。
@implementation UIToolbar (Modal)
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *hitView = [super hitTest:point withEvent:event];
UIActionSheet *mySheet = [[[UIApplication sharedApplication] delegate] myActionSheet];
if ([mySheet isVisible]) return nil;
else return hitView;
}
@end
.h ファイルに特別なものを含める必要はありません
@interface UIToolbar (Modal) {
}
@end
ちなみに、この解決策を見つける前に、空の配列をpassthroughViewsに割り当ててみました.stalinkayによって(最初に)説明されたようにアクセスできますが、これは実際には機能しません(文書化されていないことに加えて)。
これを行う他の方法にはすべて欠点があります。方向の変更を処理する必要があるか、実際にはアクションシートを閉じることだけが実行されるときに、ツールバーのボタンが押し下げられているように見えます。
アップデート
iOS 4.3 以降、これは機能しなくなりました。サブクラス化する必要があります:
UIToolbarWithModal.h
#import <Foundation/Foundation.h>
@interface UIToolbarWithModal : UIToolbar {
}
@end
アクション シートを作成するときは、おそらくアプリのデリゲート (この例では myActionSheet プロパティ) でアクセスできるようにしておく必要があることを思い出してください。
UIToolbarWithModal.m
#import "UIToolbarWithModal.h"
#import "MyDelegate.h"
@implementation UIToolbarWithModal
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *hitView = [super hitTest:point withEvent:event];
UIActionSheet *mySheet = [[[UIApplication sharedApplication] delegate] myActionSheet];
if ([mySheet isVisible]) return nil;
else return hitView;
}
@end
次に、以前に UIToolbar を使用していたコードで UIToolbarWithModal を使用します。