如何在ios中的共享扩展中访问keyWindow?

时间:2015-06-15 06:52:43

标签: ios ios8 ios-app-extension ios8-extension ios8-share-extension

我需要在我的应用的分享扩展中访问keyWindow到
- 添加一些指标视图
- 访问窗口的宽度和高度

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

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

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

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

3 个答案:

答案 0 :(得分:0)

扩展程序无法使用共享应用程序。您无法从共享扩展访问密钥窗口。您可以从UINavigationController子类化ShareExtension View控制器,并且可以呈现模态视图控制器,然后也可以导航。在该模态视图控制器中,您可以添加活动指示器。

答案 1 :(得分:0)

UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)];
UIWindow *keyWindow = application.keyWindow;

然而,keyWindow是零......

答案 2 :(得分:-1)

UIApplication不适用于扩展程序。要添加指标视图,您必须通过UIViewController堆栈执行此操作,但是您可以获得屏幕的大小,这可能足以取决于确切的用例(swift):

UIScreen.mainScreen().bounds.size

关于[UIScreen mainScreen] .bounds与[UIApplcation sharedApplication] .keyWindow.bounds?

之间的差异,请阅读more here

<强>更新

使用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);