При представлении из элемента панели кнопок обычно требуется отключить все остальные кнопки на панели инструментов до тех пор, пока лист действий не будет отклонен.
Я думаю, что самый простой способ сделать это - изменить класс 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, но на самом деле это не работает (в дополнение к отсутствию документов). *
У всех других способов сделать это есть свои недостатки - либо вы должны обрабатывать изменения ориентации, либо кнопки панели инструментов выглядят так, как будто они нажимают, когда на самом деле единственное предпринимаемое действие - это отклонение таблицы действий.
UPDATE
Начиная с 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
Тогда просто используйте UIToolbarWithModal в своем коде, где вы уже использовали UIToolbar.