2014-11-04 178 views
37

因此,我嘗試了一切嘗試將搜索欄導入Swift中的導航欄。但遺憾的是我沒有得到它的工作,只是還沒有...在Swift中的導航欄中獲取搜索欄

對於那些你們誰不知道我在說什麼,我試圖做這樣的事情

enter image description here

請注意導航欄中的搜索欄。因此,這裏就是我目前使用

self.searchDisplayController?.displaysSearchBarInNavigationBar = true 

我突然出現在我的viewDidLoad,然後當我加載了我提出與應用,只是一個空的導航欄.... :(任何想法?

回答

49

試試這個

var leftNavBarButton = UIBarButtonItem(customView:Yoursearchbar) 
    self.navigationItem.leftBarButtonItem = leftNavBarButton 

更新

你保持一個懶惰的UISearchBar財產

lazy var searchBar:UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20)) 

在viewDidLoad中

searchBar.placeholder = "Your placeholder" 
var leftNavBarButton = UIBarButtonItem(customView:searchBar) 
self.navigationItem.leftBarButtonItem = leftNavBarButton 

如果你想用故事板 只需將您的搜索欄作爲一個出口,然後用插座搜索欄

+0

我將如何確定'Yoursearchbar'? – user302975 2014-11-04 02:13:57

+0

查看更新中的代碼 – Leo 2014-11-04 02:24:25

+0

迄今爲止這麼好。但是,我將如何添加佔位符?任何方式通過故事板? – user302975 2014-11-04 02:30:33

10

更換懶財產在您的視圖控制器:

lazy var searchBar = UISearchBar(frame: CGRectZero) 

override func viewDidLoad() { 
    super.viewDidLoad() 

    searchBar.placeholder = "Search" 

    navigationItem.titleView = searchBar 
} 

這樣做,通過設置navigationItem.titleVie w,搜索欄會自動對齊iPhone和iPad設備。注意:只有V8.4和V9.0

測試SWIFT 3

lazy var searchBar = UISearchBar(frame: CGRect.zero) 
+0

當用戶點擊「取消」按鈕時如何從navigationItem.titleView中刪除它? – Satyam 2017-04-28 16:18:21

+0

相同的問題^ – 2017-07-02 20:01:57

+1

如果你正在談論搜索欄取消按鈕,那麼請關閉我的頭頂。實現UISearchBarDelegate函數searchBarCancelButtonClicked(:),在該函數中調用navigationItem.titleView = nil。這應該刪除搜索欄,如果這是你的意思是「刪除它」。對於普通的搜索欄功能,還要確保你實現了searchBarSearchButtonClicked(:)添加searchBar.resignFirstResponder(),當點擊搜索按鈕時(或者通過返回鍵按下)刪除鍵盤 – iAmcR 2017-07-04 16:39:28

30
// create the search bar programatically since you won't be 
    // able to drag one onto the navigation bar 
    searchBar = UISearchBar() 
    searchBar.sizeToFit() 

    // the UIViewController comes with a navigationItem property 
    // this will automatically be initialized for you if when the 
    // view controller is added to a navigation controller's stack 
    // you just need to set the titleView to be the search bar 
    navigationItem.titleView = searchBar 
+0

這是一個比任何其他解決方案更好的方法。 – Profstyle 2016-05-06 12:32:35

+0

@ antonio081014,兄弟你能幫我看看我的問題嗎?https://stackoverflow.com/questions/46375778/add-navigation-bar-in-uicollectionview-in-swift-4-ios-11? – 2017-09-23 03:47:11

0
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 

    searchBar.endEditing(true) 
    searchBar.text = nil 
    print("## search btn clicked : \(searchBar.text ?? "")") 
} 
+1

感謝您使用此代碼段,這可能會提供一些有限的即時幫助。通過展示*爲什麼*這是一個很好的解決方案,並且使它對未來的讀者更有用,一個正確的解釋[將大大提高](// meta.stackexchange.com/q/114762)其長期價值其他類似的問題。請[編輯]你的答案以添加一些解釋,包括你所做的假設。 – 2017-11-08 15:14:12