2016-01-20 55 views
0

所以,我已經看到代碼在Objective-C中使用.setKeyboardAppearance來完成它,但我無法在swift中找到任何等價物。我正在開發一個tvOS項目,並根據教程使用searchController。我試圖調節鍵盤和有這樣的事情你如何改變鍵盤快速搜索欄的外觀?

searchController!.searchBar is UITextInputTraits // returns true 
var searchInput = searchController!.searchBar as UITextInputTraits 
searchInput.keyboardAppearance = UIKeyboardAppearance.Dark //error 

的問題是,每當我試圖做任務,我得到 Cannot assign to property: 'searchInput' is immutable即使我使用var初始化它。有什麼我做錯了嗎?

回答

0

我想通了!這是一個相當不雅的解決方案。您基本上必須使用界面顯示窗口(模擬位置之前的調試選項),並找出UISearchBarTextField的深度有多少個子視圖。

編輯:因此,這假設結構將永遠是相同的,這是不能保證。可以遞歸地檢查子視圖來找到UITextField,但是假設只有1個。基本上,除了Apple創建一個可靠地返回字段的函數之外,沒有什麼可靠的消息,所以我沒有做遞歸函數路由,而是做了這個建議可選。

let theBar:UITextField? = searchBar.subviews[0].subviews[0].subviews[0] as? UITextField 
theBar?.keyboardAppearance = UIKeyboardAppearance.Dark 
+0

這不僅不雅,而且非常危險。假設文本字段始終是3級深度,並始終是第一個子視圖,然後強制將任何視圖的強制轉換爲文本字段,如果Apple更改它,則您的應用程序將崩潰。如果這是唯一的方法,我建議你遍歷視圖層次結構來查找文本字段,或者至少將其轉換爲可選的以避免崩潰。 – EmilioPelaez

+0

非常好的一點!感謝捕捉我有潛在危險的大腦屁。我調整了我的代碼 –

+0

我剛剛找到了這個答案,我認爲這會更好。這個想法是使用UIAppearance來改變鍵盤外觀。如果你不想覆蓋整個應用程序的外觀,你可以使用'appearanceWhenContainedIn:'。 http://stackoverflow.com/a/19102086/725628 – EmilioPelaez