iOS: может ли библиотека в Objective C создать всплывающее окно и управлять взаимодействием? - PullRequest
2 голосов
/ 02 сентября 2011

Я хочу создать класс в библиотеке, который по запросу будет выполнять сложное взаимодействие с пользователем.Приложение, которое инициализирует библиотеку, не будет предоставлять никакой информации, например, ее UIWindow или чего-либо еще.Это технически возможно?Я знаю, что могу сделать простое всплывающее окно, но как насчет того, что нужно создать на лету?Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

Ваша библиотека будет иметь доступ к синглетам, таким как [UIApplication sharedApplication], поэтому, если вы хотите что-то представить пользователю, вы можете просто добавить свое представление непосредственно в окно:

- (void)addViewToWindow:(UIView *)aView
{
    UIWindow *mainWindow = [[UIApplication sharedApplication] keyWindow];
    [mainWindow addSubview:aView];
}

Возможно, лучший способбыло бы представить его модально из контроллера представления, хотя.

1 голос
/ 02 сентября 2011

Используйте UIViewController для любого сложного взаимодействия с пользователем.Чтобы представить контроллер представления модально, вам нужно найти подходящий родительский контроллер представления.Вы можете получить доступ к корневому контроллеру приложения, используя -rootViewController метод UIWindow, например:

NSArray *windows = [[UIApplication sharedApplication] windows];
UIViewController *rootViewController = (windows.count > 0) ? [[windows objectAtIndex:0] rootViewController] : nil;
if (rootViewController)
    // Present your view controller modally
else
    // Unable to present any view controller

Вы также можете предоставить метод делегата и использовать его для получения контроллера представления:

- (UIViewController *) rootViewControllerForComplexClass:(id)complexClass;  

В вашей библиотеке у вас есть доступ к делегату и доступ к контроллеру вида:

UIViewController *rootViewController = [self.delegate rootViewControllerForComplexClass:self];
// Present your view controller modally
...