我有以下代码在当前可见视图(self.view
)上显示操作表
[actionSheet showInView:[self view]];
但是我无法通过使用以下方式在应用代理中获得对此操作表的引用:
UIView *topView = [[self.window subviews] lastObject];
答案 0 :(得分:3)
我认为行动表并未真正作为子视图添加:
- (void)didPresentActionSheet:(UIActionSheet *)actionSheet
{
NSLog(@"%@, %@", actionSheet.superview, self.view);
}
因此,其中一种方法是在显示操作表时发布通知;例如:
// delegate = self;
- (void)didPresentActionSheet:(UIActionSheet *)actionSheet
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"ActionSheetPresented" object:nil userInfo:@{@"actionSheet": actionSheet}];
}
在AppDelegate
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(displayed:) name:@"ActionSheetPresented" object:nil];
- (void)displayed:(NSNotification *)notification
{
UIActionSheet *action = notification.userInfo[@"sheet"];
NSLog(@"%@", action);
}
只要AppDelegate
委托API触发,您也可以在视图控制器和didPresentActionSheet:
中引用该公共属性。