How to do “actionSheet showFromRect” in iOS 8?

前端 未结 4 469
旧巷少年郎
旧巷少年郎 2021-01-13 16:03

In iOS 7, I show actionSheet by \"showFromRect\":

[actionSheet showFromRect:rect inView:view animated:YES];

But in iOS 8, this doesn\'t wor

相关标签:
4条回答
  • 2021-01-13 16:18

    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!

    0 讨论(0)
  • 2021-01-13 16:25

    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];
    
    0 讨论(0)
  • 2021-01-13 16:39

    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.

    0 讨论(0)
  • 2021-01-13 16:45

    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.

    0 讨论(0)
提交回复
热议问题