在這裡我要說一下,ios開發的知識點都偏於基礎,我只記錄了一些基礎的知識點,並進行了擴充套件,適合入門的朋友:
【IOS初學者】UITableView與自定義UITableViewCell
【IOS初學者】bundle知識點總結
【IOS初學者】陣列與字典
UINavigationController是IOS程式設計中比較常用的一種viewcontroller,在介紹它的功能之前,我們先對比一下是否使用UINavigationController,在介面上有什麼異同:
UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:[MainViewController new]];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.window makeKeyAndVisible];
//使用navigationController
// self.window.rootViewController = navigationController;
//不使用navigationController
self.window.rootViewController = [EmptyViewController new];複製程式碼
根據以上程式碼,我們可以看到如下的執行結果:
根據上圖對比可知,使用navigationController比普通的viewcontroller多了上面一層導航條,可以更方便的控制介面的跳轉。
UINavigationController view層級
介紹UINavigationController view層級,我們先從一張圖開始:
UINavigationController也是一個ViewController,並不僅僅是一個導航條,它是在普通的ViewController基礎上增加了新的功能。根據上面的圖,我們進行逐步的分析。
UINavigationItem
我們都知道navigationItem是UIViewController的一個屬性,這個屬性是為UINavigationController服務的。
檢視原始碼,UINavigationItem中有兩個比較常用的item:
// Some navigation items want to display a custom left or right item when they`re on top of the stack.
// A custom left item replaces the regular back button unless you set leftItemsSupplementBackButton to YES
@property(nullable, nonatomic,strong) UIBarButtonItem *leftBarButtonItem;
@property(nullable, nonatomic,strong) UIBarButtonItem *rightBarButtonItem;複製程式碼
也就是導航欄上的左右button,他們都是navigationItem中的一個元件,我們可以直接設定,例如:
UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithTitle:@"Root"
style:UIBarButtonSystemItemAction
target:self
action:@selector(butClick)];
self.navigationItem.rightBarButtonItem = rightItem;
self.navigationItem.title = @"Hello, im the title";複製程式碼
執行結果如下:
UINavigationItem繼承自NSObject,包含了當前頁面導航欄上需要顯示的全部資訊:title,prompt,titleView,leftBarButtonItem,rightBarButtonItem,backBarButonItem
UINavigationBar
UINavigationBar繼承自UIView,看一下他的屬性可知,他主要是對UINavigationItem進行管理的。
@property(nonatomic,assign,getter=isTranslucent) BOOL translucent NS_AVAILABLE_IOS(3_0) UI_APPEARANCE_SELECTOR; // Default is NO on iOS 6 and earlier. Always YES if barStyle is set to UIBarStyleBlackTranslucent
// Pushing a navigation item displays the item`s title in the center of the navigation bar.
// The previous top navigation item (if it exists) is displayed as a "back" button on the left.
- (void)pushNavigationItem:(UINavigationItem *)item animated:(BOOL)animated;
- (nullable UINavigationItem *)popNavigationItemAnimated:(BOOL)animated; // Returns the item that was popped.
@property(nullable, nonatomic,readonly,strong) UINavigationItem *topItem;
@property(nullable, nonatomic,readonly,strong) UINavigationItem *backItem;
@property(nullable,nonatomic,copy) NSArray<UINavigationItem *> *items;
- (void)setItems:(nullable NSArray<UINavigationItem *> *)items animated:(BOOL)animated;
........複製程式碼
UINavigationBar與UINavigationItem的區別
- UINavigationBar是繼承自UIView的,UINavigationItem繼承自NSObject的。各自的屬性和功能不同
- UINavigationBar幷包含所有UINavigationItem的棧,管理整個NavigationController的UINavigationItem。