Customize Navigation bar

給我來個不按牌理出牌的Navigation bar

--

Photo by Anastasia Petrova on Unsplash

距離上次發文居然已經過了快要一個月了,原因是這個月中幸運的找到了iOS Developer的工作,這個再找時間來分享,今天要來說的是最近工作上有用到的功能。

Navigation Bar

相信這個功能連還不太會寫程式的新手朋友都會用,熟到不能再熟,透過UI元件(如:UIButton之類的),拉Segue可以換到下個畫面,而加入Navigation Controller之後會自動產生Navigation Bar,可以按Navigation Bar上面的Back鍵回到上一頁。

Navigation controller
Navigation bar 上的Back

但是問題來了,如果我不想要回到上一頁呢?

然後我還真的查到了!

一輩子的好朋友總會幫你的忙的。

setHidesBackButton

今天我並不想依照Navigation controller的安排,不想回到上一頁要怎麼辦呢? 其實不難,只要在viewDidLoad加上setHidesBackButton就好。

override func viewDidLoad() {
super.viewDidLoad()

self.navigationItem.setHidesBackButton(true, animated: true)

}
Navigation bar 上沒有Back鍵了

Customize Navigation bar

是說,隱藏Back鍵然後呢?

這是因為我想要E頁面切換到C頁面去。

E go to C

在Navigation bar左邊加上Button,設定切換到C頁面。

我查到的方法是這樣:加入leftBarButtonItem然後設定顯示文字及格式等,並設定按下button後要進行什麼動作,比較不解的是,action裡的function雖然也是自訂的,但前面要加入objective-c,不知道是swift自己沒有這個方法,還是我查到的方法比較舊,原文參考網頁在公司查的,現在回到家居然找不到白天在公司查到的網址,無法再看一次(哭)。

我在這邊是用pushViewController至下一頁,當然也可以換成別的function,像是開啟相機、開啟相簿或是想開啟safari都可以,就看function裡要怎麼寫囉。

override func viewDidLoad() {
super.viewDidLoad()

self.navigationItem.setHidesBackButton(true, animated: true)

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "至C頁面", style: .done , target: self, action: #selector(addTapped))

}
@objc func addTapped(){
let controller = self.navigationController?.storyboard!.instantiateViewController(withIdentifier: "CC")
self.navigationController!.pushViewController(controller!, animated: true)
}
Navigation bar上面的back鍵變成可以切換到C頁面
從E頁面來的話,按Back也會回到E頁面去

也可以放在右邊,只要把leftBarButtonItem改成rightBarButtonItem即可。

self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "至C頁面", style: .done , target: self, action: #selector(addTapped))
位置換到右邊

當然也可以左右邊都有Button,我公司的專案就是左右邊都有,各有不同功能,基於公司機密就不放圖了。

也不是什麼很難的問題,但多學到一個東西總是好事,所以就記錄一下囉!Swift新手也可以練習看看喔,因為這是我實際上班後有用到的東西,大家一起加油吧。

如果有值得大家參考的地方再麻煩大家幫我拍拍手喲,謝謝大家耐心閱讀🙇‍♀️

--

--

Julia Wang
彼得潘的 Swift iOS / Flutter App 開發教室

Learning Programming , Hiking , Travels , Tour , Exploring nature 『你必須要很努力,才能看起來毫不費力』