Как получить доступ к keyWindow в расширении общего доступа в ios?

Мне нужно получить доступ к keyWindow в расширении общего доступа для моего приложения, чтобы
— добавить представление индикатора
— получить доступ к ширине и высоте окна

Я написал следующую строку в классах расширения общего доступа:

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

Но он говорит, что «sharedApplication» недоступен.
Как я могу получить доступ к keyWindow в расширении общего доступа?

Нужны ваши ценные предложения.
Заранее спасибо


person Ashok    schedule 15.06.2015    source источник
comment
Я читал ответы, но у меня похожая проблема. Я не могу подклассифицировать контроллер представления, потому что у меня есть собственный класс UIWindow, который я хочу добавить в качестве подвида к «keyWindow» в моем расширении общего доступа. Кто-нибудь знает как это сделать?   -  person Shwethascar    schedule 22.03.2016
comment
На данный момент «keyWindow» недоступен в расширении общего доступа. Попробуйте добавить свое пользовательское окно в представление текущего контроллера просмотра, отключите взаимодействие с пользователем для панели навигации контроллера просмотра, если у вас есть. Я не пробовал это, но попробуйте.   -  person Ashok    schedule 23.03.2016


Ответы (3)


Общее приложение недоступно для расширений. Вы не можете получить доступ к ключевому окну из расширения общего доступа. Вы можете создать подкласс контроллера представления ShareExtension из UINavigationController и можете представить контроллер модального представления, тогда также возможна навигация. В этот контроллер модального представления вы можете добавить индикатор активности.

person Boudhayan    schedule 15.06.2015

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

однако keyWindow равен нулю...

person xy z    schedule 17.11.2017

UIApplication недоступен для расширений. Чтобы добавить представление индикатора, вам нужно будет сделать это через стек UIViewController, но вы МОЖЕТЕ получить размер экрана, которого может быть достаточно в зависимости от конкретного варианта использования (быстро):

UIScreen.mainScreen().bounds.size

Подробнее о различиях между [UIScreen mainScreen] читайте здесь. границы против [UIApplication 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);
person kev    schedule 31.08.2015