swift2のTextFieldのclearbuttonの色を変更する


## 開発環境

* xcode7.1
* swift2.1



## はじめに

UITextFieldに文字を入力した時にフォームの右端にあらわれるクリアボタンの色を自由に変更します。

まずは、xcodeプロジェクトを作成。
今回は「clearbtn_sample.xcodeproj」としました。

Main.storyboardを開きTextFieldを追加
![スクリーンショット 2015-11-12 22.39.10.png](https://qiita-image-store.s3.amazonaws.com/0/88163/ddbac3d3-b80f-79c9-dbe3-4237f8580fca.png "スクリーンショット 2015-11-12 22.39.10.png")

　
次にIBOutletの設定。
「clearbtn_sample」という変数で利用します。


```swift:viewcontroller.swift
import UIKit

class ViewController: UIViewController{

    @IBOutlet weak var clearbtn_sample: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


}
```
これではじめの設定は完了。

ちなみにこの状態でiosシュミレーターを起動するとデフォルトはこんな感じですね。
![スクリーンショット 2015-11-12 21.53.28.png](https://qiita-image-store.s3.amazonaws.com/0/88163/980d2e90-1d0e-0bec-74fd-e9e1ca3d3ac3.png "スクリーンショット 2015-11-12 21.53.28.png")



##UITextFieldを拡張する

```swift:UITextField+ClearButton.swift
import Foundation
import UIKit

//　UITextFieldの拡張
//　クリアボタンの色を変更
extension UITextField {
    func setTintColorToClearButton(){
        let anyobj:AnyObject? = self.valueForKey("_clearButton")
        if let anyobj:AnyObject = anyobj {
            if anyobj.isMemberOfClass(UIButton) {
                let button:UIButton = anyobj as! UIButton
                if let image:UIImage = button.imageForState(.Highlighted) {
                    let paintedImage:UIImage = image.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
                    button.setImage(paintedImage, forState: .Normal)
                    button.setImage(paintedImage, forState: .Highlighted)
                }
            }
        }
    }
}

```

viewcontroller.swiftというファイルと同じ階層にUITextFieldの拡張ファイルUITextField+ClearButton.swiftを作成する。
この拡張ファイルでは新たにsetTintColorToClearButton()という関数を作成しました。
viewcontroller.swiftでsetTintColorToClearButton()を使いたいので、viewcontrollerクラスにUITextFieldDelegateを追加してあげる。
後はviewcontroller.swiftのviewdidload()でsetTintColorToClearButton()関数を呼び出すだけ！

```swift:UITextField+ClearButton.swift

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var clearbtn_sample: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //拡張ファイルで作ったsetTintColorToClearButton()関数を呼び出す。
        clearbtn_sample.setTintColorToClearButton()
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


}

```

設定は以上で完了なのでシュミレーターを起動してみます。
![スクリーンショット 2015-11-12 22.09.06.png](https://qiita-image-store.s3.amazonaws.com/0/88163/f236ada8-1416-ceac-23d4-2239524f0b0b.png "スクリーンショット 2015-11-12 22.09.06.png")
はじめはクリアボタンがグレーだったのに対して、ブルーに変わってます。

ボタンの色の変更はxcode右側のユーティリティバーのTintを変更するだけ！

![スクリーンショット 2015-11-12 22.37.11.png](https://qiita-image-store.s3.amazonaws.com/0/88163/08f8c4f7-89d6-9de0-1f5a-5d32bb8ee8a9.png "スクリーンショット 2015-11-12 22.37.11.png")

自由に色を変えられます！

![スクリーンショット 2015-11-12 22.37.39.png](https://qiita-image-store.s3.amazonaws.com/0/88163/46a8145a-30ad-bb35-ef2f-d0b6f2e0519e.png "スクリーンショット 2015-11-12 22.37.39.png")
![スクリーンショット 2015-11-12 22.08.24.png](https://qiita-image-store.s3.amazonaws.com/0/88163/1c682cff-1050-efc4-c284-93129eb9891d.png "スクリーンショット 2015-11-12 22.08.24.png")

##さいごに

HTML、CSSなら簡単に変更できるフォームのカラーリング、
xcodeでやろうとするとこんなにも面倒なんですね笑
こんなに面倒なことしなくても出来るよ！なんて意見があったら教えていただけるとありがたいです笑

まだまだ出来ることはたくさんあるのでおいおい紹介できたらと思います。