查找顶部显示的视图 UIActionSheet
Find top shown view UIActionSheet
我有以下代码在当前可见视图 (self.view
)
上显示一个动作 sheet
[actionSheet showInView:[self view]];
但是我无法通过使用以下方法在应用程序委托中获得对此操作 sheet 的引用:
UIView *topView = [[self.window subviews] lastObject];
我认为动作 sheet 并没有真正添加为子视图:
- (void)didPresentActionSheet:(UIActionSheet *)actionSheet
{
NSLog(@"%@, %@", actionSheet.superview, self.view);
}
因此,其中一种方法是在显示操作 sheet 时发布通知;例如:
// 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);
}
你也可以只在视图控制器中保留它是一个 public 属性 并在 AppDelegate
中引用只要有 didPresentActionSheet:
委托 API火灾。
我有以下代码在当前可见视图 (self.view
)
[actionSheet showInView:[self view]];
但是我无法通过使用以下方法在应用程序委托中获得对此操作 sheet 的引用:
UIView *topView = [[self.window subviews] lastObject];
我认为动作 sheet 并没有真正添加为子视图:
- (void)didPresentActionSheet:(UIActionSheet *)actionSheet
{
NSLog(@"%@, %@", actionSheet.superview, self.view);
}
因此,其中一种方法是在显示操作 sheet 时发布通知;例如:
// 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);
}
你也可以只在视图控制器中保留它是一个 public 属性 并在 AppDelegate
中引用只要有 didPresentActionSheet:
委托 API火灾。