web-dev-qa-db-ja.com

swiftの右側にあるUiSearchBar検索アイコンを設定する方法

私はSwiftに取り組んでいます。

通常のSearchBarと同様に、デフォルトではFollowing Pic(1)のように表示されます。 enter image description here

しかし、設計要件に従って、次のPic(2)のように変更する必要があります。

enter image description here

次のPic(3)のようなコードを使用してみました

enter image description here

**次のコードを試したところ、正しいビューが非表示になり、テキストフィールドのrightviewを表示できませんでした

完全に非表示の検索アイコン**

let searchField = (searchBar.valueForKey("_searchField") as! UITextField)
searchField.layer.cornerRadius = 15;


    let searchIcon = searchField.leftView!
    if (searchIcon is UIImageView) {
        print("yes")
    }

    searchField.rightView = searchIcon
  searchField.leftViewMode = .Never
searchField.rightViewMode = .Always

誰でも私が要件を取得するのを手伝ってくれる? Objective Cについても提供していただければ理解できます

8
iOS dev

Switf 5

ジェヤマヘサンの答えを参考に。

私はviewDidLayoutSubviewsがviewDidAppearよりも良いチャンスだとわかりました。 viewDidAppearでsetupSearchTextField()を呼び出すと、searchTextFieldでフラッシュの変化が見られます。

ViewDidLayoutSubviewsが最初に2回呼び出され、後で何度も呼び出されるためです。 isFirst変数を追加します。

R.string.localizable.product_name()->これは優れたリソースフレームワークです。詳細については、こちらをご覧ください。 https://github.com/mac-cain13/R.Swift

private var isFirst = true
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    guard isFirst else {
    return
    }
    isFirst = false
    setupSearchTextField()
}

private func setupSearchTextField() {
    let searchTextField = searchBar.searchTextField
    searchTextField.backgroundColor = .white
    searchTextField.layer.borderColor = UIColor(hex: "707070").cgColor
    searchTextField.layer.borderWidth = 1
    searchTextField.placeholder = R.string.localizable.product_name()
    let imageView = UIImageView(image: R.image.searchIcon())
    searchTextField.rightView = imageView
    searchTextField.rightViewMode = UITextField.ViewMode.always
    //delegate
    searchBar.delegate = self
}
0
Jerome