最近開始在嘗試把玩 SwiftUI 並打算作為一個 side project 的主要 UI 編寫方式,這篇文章則是其中一個使用情境所遇上的困難處。
開發環境
- Xcode 11 Beta 7(但顯示為 Beta 6 - 11M392r )
- macOS Catalina - 19A546d
- iOS 13.1 Beta
記錄這點蠻重要的,因為可能過個幾版這篇文章就沒參考價值了😂 還沒有下載更新的朋友,可以快去更新一下!
使用情境
我要來做一個搜尋的功能,讓使用者可以輸入關鍵字,並自動搜尋完後將結果呈現在下方👏
於是我們可以用兩個 UI 元件來達成這件事
- TextField
- List
並寫一個
@Binding var
或是@ObservedObject var
來讓TextField
的 text 有個 binding 的地方,當它的值有更新時,觸發搜尋的動作🚀 而搜尋完的結構再來更新畫面上的List
。
聽起來沒什麼毛病,對吧?
實際上你會遇上的問題⋯
當你想和我一樣,用拼音的輸入方式時;不論是你拼音還是注音,當你按下第一個音時,便會跑一次上述的流程了⋯⋯
而我們所期望的流程應該是使用者選完字後再進行搜尋,這點在目前的 TextField
是做不到的,因為它不會判別目前是否有還沒拼完音的狀況就發動了。
那該怎麼辦呢?
你可以查看一下當時的相關推文
我的作法就是以 UIViewRepresentable
來包裝,詳細的程式碼可以到 GitHub 查看👍
成果
當輸入了 luo dong
但是還沒選字的話並不會有動作。
而當選字後便會進行搜尋🔍
如果還有什麼問題的話,歡迎留言討論👏