如前所述 - 我是 Objective-C 的初级新手,但在阅读了 4 本有关该主题的实体书以及大量电子书和文档后,我仍然找不到我想要的东西。
我有一个顶级内容视图控制器,想要从应用程序委托的窗口属性的物理尺寸配置其视图属性。这是几个人已经提出的问题。 ([UIScreen mainScreen]
由于之前已经在该论坛上多次播出的原因而没有剪掉它)。因此,逻辑方法是让内容视图控制器读取应用程序委托窗口的框架。现在,我发现接近这个的唯一答案是使用[[[UIApplication sharedApplication] window] frame]
- 但是,这仅在窗口属性设置为 keyAndVisible 后才有效。内容视图控制器需要读取应用程序委托的窗口属性before它得到 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].
稍微扩展一下,如何访问其他目标对象中的方法,这些目标对象不是执行查询的对象的范围后代?
就像我说的,我对所有这些都是菜鸟,这可能是另一个愚蠢的菜鸟问题,但似乎还没有人以简单的方式回答这个问题。
(程序上 - 我的家乡 - 有很多方法可以将窗口内容放入其他级别的范围,从使整个程序套件全局可访问窗口到通过各种函数层次结构将其作为特定参数传递 -但这种客观的东西似乎偏离了既定的程序实践)。
如果有人可以提供帮助,我将非常感激。这东西绝对不直观!
V.V.