0

我知道两种方法,每种方法都有自己的缺点:

大家知道有什么更好的方法吗?(同样,它适用于 iOS 4.0,因为我需要该应用程序与 iOS 4.0+ 兼容)

多谢你们,

4

2 回答 2

3

您可能需要两种方法,取决于操作系统版本。这是因为在 5.0 及更高版本中,不会调用 drawRect 函数。相反,5.0 有自己的自定义导航栏例程。我最终同时使用了 4.0 和 5.0 方法,并在运行时确定了版本并选择了正确的方法。

至于第一种方法,我不明白为什么你真的需要界面构建器。只需以编程方式实例化您的对象并将它们添加为子视图。Interface builder 本身并没有做更多的事情——它只是处理它们的一种更方便的方式。

于 2012-01-12T19:41:49.647 回答
1

实际上,没有必要调配方法、添加类别或使用 Interface Builder,相反,您可以子类化UINavigationBar并使用NSKeyedUnarchiver将类更改UINavigationController.navigationBar为您的自定义子类。

+ (UINavigationController*)customizableNavigationControllerWithController:(UIViewController*)controller {

NSAssert(controller != nil, @"UINavigationController(CustomNavigationBar) customizableControllerWithController: controller can not be nil");

UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:nil] autorelease];

NSData *navControllerData = [NSKeyedArchiver archivedDataWithRootObject:navController];

NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:navControllerData] autorelease];

[unarchiver setClass:[CustomNavigationBar class] forClassName:@"UINavigationBar"];

UINavigationController *customizableNavController = [unarchiver decodeObjectForKey:@"root"];

customizableNavController.viewControllers = [NSArray arrayWithObject:controller];

return customizableNavController;

}

于 2012-01-28T11:24:41.673 回答