在iOS 7中,我通过" showFromRect"显示actionSheet:
[actionSheet showFromRect:rect inView:view animated:YES];
但是在iOS 8中,这并不起作用。他们替换实现并建议我们使用UIAlertController。那么如何像弹出框一样显示这个actionSheet?
答案 0 :(得分:11)
使用UIAlertController,您可以访问popoverPresentationController属性来设置sourceView(aka inView)和sourceRect(aka fromRect)。这与上一个showFromRect:inView:
的外观相同UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"message" preferredStyle:UIAlertControllerStyleActionSheet];
// Set the sourceView.
alert.popoverPresentationController.sourceView = self.mySubView;
// Set the sourceRect.
alert.popoverPresentationController.sourceRect = CGRectMake(50, 50, 10, 10);
// Create and add an Action.
UIAlertAction *anAction = [UIAlertAction actionWithTitle:@"Action Title" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
NSLog(@"Action Pressed");
}];
[alert addAction:anAction];
// Show the Alert.
[self presentViewController:alert animated:YES completion:nil];
答案 1 :(得分:3)
我也像你一样遇到这个问题,但我的情况是我在iPad设备的UIActionSheet
中显示UIWindow.view
,而UIWindow
未设置rootViewController
}。
因此,我发现,如果我们在UIActionSheet
等于rootViewController
的窗口中显示nil
,则UIActionSheet
无法显示。
我的解决方案是设置
window.rootViewController = [[UIViewController alloc] init];
然后,
[actionSheet showFromRect:rect inView:window.rootViewController.view animated:YES].
希望这会对你有帮助!
答案 2 :(得分:-1)
我发现重点是在iOS 7中,您在使用actionSheet
时在新窗口中显示"showFromRect: inView:"
;
但是在iOS 8中,您只在参数中发送的视图上显示actionSheet
。
所以解决方案是发送
self.superView
[actionSheet showFromRect:rect inView:[self.superView] animated:YES];
我和我的同事通过随机尝试来解决这个问题。
答案 3 :(得分:-1)
根据这个https://developer.apple.com/library/ios/documentation/Uikit/reference/UIActionSheet_Class/index.html主题 不推荐使用UIActionSheet,您应该使用UIAlertController而不是UIActionSheet。
感谢。