当从一个条形按钮项进行演示时,通常希望在操作表被解除之前禁用工具栏上的所有其他按钮。
我认为最简单的方法是修改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
头文件不需要包含任何特殊内容
@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即可。