Как уже упоминалось ранее - я новичок в Objective-C первого порядка, но прочитав 4 физических книги по этому предмету и кучу электронных книг и документации, я все еще не могу найти то, что ищу.
У меня есть контроллер представления содержимого верхнего уровня, который хочет настроить свое свойство представления из физических измерений свойства окна делегата приложения.Это то, о чем несколько человек уже задавали вопросы.([UIScreen mainScreen]
не сокращает его по причинам, уже переданным много раз прежде на этом форуме).Следовательно, логический подход заключается в том, чтобы контроллер представления контента считывал фрейм окна делегата приложения.Теперь, единственный ответ, который я нашел, который подходит близко к этому, должен использовать [[[UIApplication sharedApplication] window] frame]
- однако, это работает только после того, как свойство окна было сделано keyAndVisible.Контроллер представления содержимого должен прочитать свойство окна делегата приложения , прежде чем получит makeKeyAndVisible.Код идет в следующем порядке ....
Делегат приложения:
- (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {
// This next line is a test window frame for R&D purposes....
[self setWindow: [[UIWindow alloc] initWithFrame: CGRectMake(0.0f, 20.0f, 320.0f, 320.0f)]];
if ([self window]) {
contentViewController = [[ContentViewControl alloc] initWithNibName: nil bundle: nil]; // Content view controller instantiated here
if (contentViewController) {
[[self window] addSubview: [contentViewController view]];
[[self window] layoutSubviews];
[[self window] makeKeyAndVisible]; // Window made key and visible here
return YES;
}
}
return NO;
}
В моем контроллере представления содержимого initWithNibName: nil bundle: метод nil У меня есть следующий тестовый код ...
- (id) initWithNibName: (NSString *) nibNameOrNil bundle: (NSBundle *) nibBundleOrNil {
self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
if (self) {
NSLog(@"%@", NSStringFromCGRect([[[UIApplication sharedApplication] keyWindow] frame]));
// This does not work.
}
return self;
}
Это не работает из-за того, что окно App Delegate еще не является ключевым и видимым.Итак, мой вопрос таков;Как называется экземпляр моего класса делегата приложения?Я знаю, что имя Class делегата приложения по умолчанию равно myApplicationNameAppDelegate
, но после имени instance .Я хочу заменить вызов [[UIApplication sharedApplication] keyWindow]
чем-то вроде;
[myAppDelegatesInstanceName window].
Немного расширив это, как можно получить доступ к методам в других целевых объектах, которые не являются потомками области действия объекта, выполняющего запросы?
Как я уже сказал, я абсолютный нуб на все это, и это, вероятно, еще один тупой вопрос нуби, но на этот вопрос, похоже, еще никто не ответил просто.
(Процедурно- мой домашний газон - существует множество способов перенести элементы окна на другие уровни области действия - от обеспечения общего доступа к окну для всего набора программ до передачи его в качестве определенного параметра через различные иерархии функций - но этоКажется, что объективные вещи отходят от устоявшейся, процедурной практики).
Если кто-то может помочь, я был бы очень благодарен.Этот материал определенно не интуитивно понятен!VV