我只是尝试将UIWindow子类化,以便我可以拦截一些通知。除了下面列出的代码,我还进入MainWindow.xib并将UIWindow对象更新为我的子类。加载很好,问题是我的标签栏上的标签没有响应(在下面的示例中我只添加了一个标签,但在我的应用程序中我有多个(这不是问题))。任何人都可以看到我可能做错了什么?感谢。
UISubclassedWindow.h
#import <UIKit/UIKit.h>
@interface UISubclassedWindow : UIWindow
{
}
@end
UISubclassedWindow.m
#import "UISubclassedWindow.h"
@implementation UISubclassedWindow
- (id) initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSLog(@"init");
}
return self;
}
- (void)makeKeyAndVisible
{
[super makeKeyAndVisible];
NSLog(@"makeKeyAndVisible");
}
- (void)becomeKeyWindow
{
[super becomeKeyWindow];
NSLog(@"becomeKeyWindow");
}
- (void)makeKeyWindow
{
[super makeKeyWindow];
NSLog(@"makekeyWindow");
}
- (void)sendEvent:(UIEvent *)event
{
}
- (void)dealloc
{
[super dealloc];
}
@end
AppDelegate.h
@class UISubclassedWindow;
@interface My_AppAppDelegate : NSObject <UIApplicationDelegate>
{
UISubclassedWindow *window;
}
@property (nonatomic, retain) IBOutlet UISubclassedWindow *window;
@end
AppDelegate.m
@synthesize window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UITabBarController *tabBarController = [[UITabBarController alloc] init];
MainViewController *mainViewController = [[MainViewController alloc] initWithViewType: 0];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController: mainViewController];
mainNavigationController.title = @"Main";
[[mainNavigationController navigationBar] setBarStyle: UIBarStyleBlack];
[tabBarController setViewControllers: [NSArray arrayWithObjects: mainNavigationController, nil]];
[self.window setRootViewController: tabBarController];
[self.window makeKeyAndVisible];
[mainViewController release];
[mainNavigationController release];
[tabBarController release];
return YES;
}
答案 0 :(得分:4)
问题是我包括UIWindows - (void)sendEvent:(UIEvent *)事件方法,但没有调用super。我打电话给它,一切都已修复。
答案 1 :(得分:2)
编辑:请注意,这会在重大改写整个问题之前回答原始问题
首先应该找出是否有记录方式(某些调用或重写方法)来更改导航栏的高度。我非常怀疑有一个。而且我也怀疑UIWindow
是否是寻找它的地方 - 导航栏是UINavigationController的一部分。
假设没有合法的方法强制高度保持44px,你可以试试几件事:
-shouldAutoRotate.. { return NO; }
。作为快速检查,如果您只是将最顶层VC的框架设置为CGRectMake(0,0,480,320);
(来自您的子类UINavigationController或来自子类UIWindow),请查看会发生什么。如果一切仍然正常,那么您只需要添加自转部件。