怎么做" actionSheet showFromRect"在iOS 8中?

时间:2014-08-07 03:34:55

标签: uipopovercontroller ios8 uiactionsheet actioncontroller

在iOS 7中,我通过" showFromRect"显示actionSheet:

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

但是在iOS 8中,这并不起作用。他们替换实现并建议我们使用UIAlertController。那么如何像弹出框一样显示这个actionSheet?

4 个答案:

答案 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。

感谢。