In iOS 7, I show actionSheet by \"showFromRect\":
[actionSheet showFromRect:rect inView:view animated:YES];
But in iOS 8, this doesn\'t wor
I also meet this problem like you, but my case is that I show a UIActionSheet
in UIWindow.view
on the iPad device, and the UIWindow
doesn't set rootViewController
.
So, I found, if we show a UIActionSheet
in a window whose rootViewController
equals to nil
, the UIActionSheet
could not show out.
My solution is to set
window.rootViewController = [[UIViewController alloc] init];
then,
[actionSheet showFromRect:rect inView:window.rootViewController.view animated:YES].
Hope this will help you!
Using UIAlertController you can access the popoverPresentationController property to set the sourceView (aka inView) and sourceRect (aka fromRect). This gives the same appearance as the previous 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];
according to this https://developer.apple.com/library/ios/documentation/Uikit/reference/UIActionSheet_Class/index.html thread UIActionSheet is deprecated, you should use UIAlertController instead of UIActionSheet.
Thanks.
I found out the point is in iOS 7, you show actionSheet
in a new window actually when using "showFromRect: inView:"
;
But in iOS 8 you show the actionSheet
just on the view you send in parameters.
So the solution is to send
self.superView
[actionSheet showFromRect:rect inView:[self.superView] animated:YES];
Me and my colleague figured it out by randomly trying.