При представлении от элемента кнопки бар, обычно требуется, чтобы отключить все другие кнопки на панели инструментов, пока лист действие не прекращено.
Я думаю, что самый простой способ сделать это - изменить класс 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, но на самом деле это не работает (в дополнение к недокументированности).
Другие способы сделать это все имеют недостатки - либо вам придется обрабатывать изменения ориентации, либо кнопки на панели инструментов выглядят так, как будто они нажимают вниз, когда на самом деле единственным действием является отклонение листа действий.
UPDATE
С прошивкой 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
Тогда просто использовать UIToolbarWithModal в вашем коде, где вы бы использовали UIToolbar раньше.
Это связано с изменением ориентации? Или вам нужно настроить события поворота? Спасибо. – westsider