4

我需要在我的应用程序的共享扩展中访问 keyWindow
- 添加一些指示器视图
- 访问窗口的宽度和高度

我在共享扩展类中写了以下行:

UIWindow *mainWindow = [[UIApplication sharedApplication] keyWindow];

但是,它说“sharedApplication”不可用。
如何在共享扩展中访问 keyWindow?

需要您的宝贵建议。
提前致谢

4

3 回答 3

0

共享应用程序不可用于扩展。您不能从共享扩展访问关键窗口。您可以从 UINavigationController 继承 ShareExtension 视图控制器,并且可以呈现模态视图控制器,然后也可以导航。在该模式视图控制器中,您可以添加活动指示器。

于 2015-06-15T07:01:45.250 回答
0
UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)];
UIWindow *keyWindow = application.keyWindow;

但是,keyWindow 为零...

于 2017-11-17T10:58:59.457 回答
-1

UIApplication 不可用于扩展。要添加指示器视图,您必须通过 UIViewController 堆栈来执行此操作,但您可以获得屏幕的大小,这可能就足够了,具体取决于确切的用例(swift):

UIScreen.mainScreen().bounds.size

在这里阅读更多关于 [UIScreen mainScreen].bounds 与 [UIApplcation sharedApplication].keyWindow.bounds 之间的区别?

更新

使用 UIScreen 获取大小的另一种方法是导航视图层次结构。这适用于已布置视图的 UIView 或 UIViewController 中的任何位置。您还可以将指示器添加到最顶部的视图。

// Find the top most view
var view: UIView = self;
while let higherView = view.superview {
    view = higherView;
}

// Size you need
var size: CGSize = view.frame.size;

// Add the indicator
let indicator: UIView = UIView(frame: CGRectMake(100, 100, 100, 100));
indicator.backgroundColor = UIColor.orangeColor();
view.addSubview(indicator);
view.bringSubviewToFront(indicator);
于 2015-08-31T20:19:51.133 回答