簡體   English   中英

如何使用自定義 UINavigationBar

[英]How to use custom UINavigationBar

我有UINavigationBar的子類。

@interface MyNavigationBar : UINavigationBar

進行了一些更改,現在希望我的應用程序NavigationController使用它:

 _navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
 [_window addSubview:[_navigationController view]];
[self.window makeKeyAndVisible];

我希望_navigationControllerMyNavigationBar

這怎么能做到?

謝謝。

您必須創建一個帶有UINavaigationController的 xib。 然后,您可以 select Interface Builder 中的navigationBar並將 class 更改為UINavigationBar的子類。

在此處輸入圖像描述

然后為了讓它更容易實例化,我向`UINavigationController 添加了一個類別,例如:

@interface UINavigationController (DSCNavigationController)

+ (UINavigationController *)dsc_navigationControllerWithRootViewController:(UIViewController *)rootViewController;

@end

@implementation UINavigationController (DSCNavigationController)

+ (UINavigationController *)dsc_navigationControllerWithRootViewController:(UIViewController *)rootViewController;
{
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"DSCNavigationController" owner:nil options:nil];

    NSAssert(1 == [topLevelObjects count], @"DSCNavigationController should have one top level object");

    UINavigationController *navigationController = [topLevelObjects objectAtIndex:0];

    NSAssert([navigationController isKindOfClass:[UINavigationController class]], @"Should have a UINavigationController");

    [navigationController pushViewController:rootViewController animated:NO];

    return navigationController;
}

@end

在使用它的 class 的頂部,確保在我的案例中導入類別,它看起來像

#import "UINavigationController+DSCNavigationController"

然后使用它看起來像

MyViewController *myViewController = [[MyViewController  alloc] init];
UINavigationController *navigationController = [UINavigationController dsc_navigationControllerWithRootViewController:myViewController];

UINavigationController 具有只讀屬性

@property(nonatomic, readonly) UINavigationBar *navigationBar

因為它是只讀的,所以您必須子類化 UINavigationBar 並覆蓋此屬性或使其成為可讀寫的。例如:

MyNaviagtionBar *myBar = [[MyNavigationBar alloc] init];
_navigationController.navigationBar = mybar;

或子類化:

我的導航控制器.h

@class MyNavigationBar;

@interface MyNavigationController : UINavigationController
@property(nonatomic, strong) MyNavigationBar *navigationBar;
@end

我的導航控制器.m

@implementation MyNavigationController
@synthesize navigationBar = _navigationBar;
@end

然后改變

_navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];

_navigationController = [[MyNavigationController alloc] initWithRootViewController:self.viewController];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM