Closed yammerjp closed 5 years ago
class ViewController: UIViewController, UISearchBarDelegate {
@IBOutlet weak var searchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
searchBar.delegate = self
searchBar.showsCancelButton = true
//プレースホルダの指定
searchBar.placeholder = "検索文字列を入力してください"
//検索スコープを指定するボタン
searchBar.scopeButtonTitles = ["果物", "野菜"]
searchBar.showsScopeBar = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func searchBarSearchButtonClicked(searchBar:UISearchBar) {
print("検索ボタンがタップ scopeIndex=\(searchBar.selectedScopeButtonIndex)")
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
print("キャンセルボタンがタップ")
}
}
あとで実装予定: タブを自動遷移
ジオコーディングのメソッドなど。ジオコーディング自体はそれほど難しくない
UISearchBarで文字入力中に、キーボード以外をタップするとフォーカスを外す。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if searchBar.isFirstResponder {
searchBar.resignFirstResponder()
}
// UIViewController.touchesBegan()でタッチイベントを取得できる
// UIItemHogehoge.isfirstResponder :Bool で UIItemHogehogeにフォーカスが乗っているかわかる
// UIItemHogehoge.resignFirstResponder() でフォーカスが外れる
}
タブを強制的に遷移させるのは可能。 ただ、遷移後にマップの位置を移動させるのができない。 当初はdelegateで対応しようと思っていたが、UIViewControllerで生成されたものと違うインスタンスを生成してしまうので、表示しているインスタンスのメソッドをさわれず変化させられない、と推測。
値渡しは(汚いが)グローバル変数に任せて、タブ遷移時に場所を移動させるメソッドを実行させたいのだが
UITabBarController.viewControllers[0]からメソッド呼べたりとかしないんでしょうか。
呼べた。
if let controller: ViewController = tabBarController?.viewControllers?[0] as? ViewController {
controller.showPoint(point: coordinate!)
}
検索
UISearchBarにユーザーが入力した場所のは前or住所から、ジオコーディングして緯度と経度を検索する。 候補をリストで表示し、特定の候補がタップされたら地図のその場所をピンで指す
Tabの追加