Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
More than 1 year has passed since last update.

はじめに

今まで UISearchBar のテキストフィールドをカスタマイズしたい場合は下記のようにアクセスする方法が主流でした。

let textField = searchBar.value(forKey: "_searchField") as? UITextField

しかし、iOS13 では実行すると下記のようなエラーとなりアプリがクラッシュします:scream:

Terminating app due to uncaught exception 'NSGenericException', reason: 'Access to UISearchBar's _searchField ivar is prohibited. This is an application bug'

This is an application bug

:scream::scream::scream:

対応

iOS13 からは searchTextField というプロパティが追加されたようです。

こちらは UISearchTextField というクラスのようですが UITextField を継承しているので今まで通りテキストフィールドとして利用できます。

iOS13 以前では今まで通り value(forKey: "_searchField") でアクセスしないといけないので下記のような extension を作ると使いやすいと思います。

extension UISearchBar {
    var textField: UITextField {
        if #available(iOS 13.0, *) {
            return searchTextField
        } else {
            return value(forKey: "_searchField") as! UITextField
        }
    }
}

これでどの画面でも searchBar.textField でアクセスできるようになりました:tada::tada::tada:

その他UISearchBarの新機能

iOS13 からは下記のクラスが追加されており色々新機能があるようです。

UISearchTextFieldDelegate というプロトコルも追加されているみたいです。

下記の記事に詳しく書いてありました。

UISearchToken がおもしろそう

さいごに

UISearchBarvalue(forKey: "_searchField") という非合法のやり方でテキストフィールドにアクセスする Developer があまりにも多いので公式で API を用意してくれたんですかね?

This is an application bug

というくらいですからお前らもう公式で用意したからそういうことやめろよ?って感じがします:sweat_smile:

余談ですが UIAlertController も下記のように色々カスタマイズできます。

UIAlertAction の setValue(_:forKey:) で下記のようにキーを指定すると色々できるようです。(参考)

  • image
  • imageTintColor
  • titleTextColor

他にも色々いじれそう...(参考)

こんな感じ

alert

UIAlertController のカスタマイズもみんなが使いまくれば公式 API が公開されるかも?:hatching_chick:

参考

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
am10
engineerlife
技術力をベースに人生を謳歌する人たちのコミュニティです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?