查找顶部显示的视图 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火灾。