查找顶部显示的视图UIActionSheet

时间:2015-04-03 20:31:31

标签: ios uiview uiactionsheet appdelegate uiwindow

我有以下代码在当前可见视图(self.view)上显示操作表

[actionSheet showInView:[self view]];

但是我无法通过使用以下方式在应用代理中获得对此操作表的引用:

UIView *topView = [[self.window subviews] lastObject];

1 个答案:

答案 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:中引用该公共属性。