Swift

Swift備忘録~ボタンの実装編~

はじめに

お仕事でStory Boardを使わずにボタンを実装することがあったので、今後も使えそうなのでここに記録します。
前回の投稿にも書いてありますが筆者の備忘録ですので、投稿の内容に過度な期待はしないでください。

環境

Xcode9.2

今回の備忘録

ボタンを実装するための必要最低限のコード

static func buttonMethod() -> UIButton {
          let button = UIButton()  //ボタンを定義 
          let height = CGFloat(○)   //ボタンの高さを定義、○の中に数値を入れる
          let width = CGFloat(○)       //ボタンの横幅を定義、○の中に数値を入れる
          button.backgroundColor = 〇〇  //ボタンの背景色を定義、○○の中に色を入れる
     return button
}

ボタンの中に画像を入れる

button.setImage(UIImage(named: "○○"), for: .normal)  //namedの部分に挿入したい画像の名前、forは最初の状態を入れる
button.imageInsets = UIEdgeInsets(top: ○, left: ○, bottom: ○, right: ○)  //ボタンの縁と画像の余白を定義、○の中に数値を入れる

ボタンの中にテキストを入れる

button.setTitle("○○", for: .normal)  //○○に入れたいテキスト、forは最初の状態を入れる
button.titleInsets = UIEdgeInsets(top: ○, left: ○, bottom: ○, right: ○)  //ボタンの縁とテキストの余白を定義、○の中に数値を入れる
button.setTitleColor(○○, for: .normal)  //○○にテキストの色、forは最初の状態を入れる

ボタンの中に画像とテキストの両方を挿入したいときは、表示される位置に注意。これを書けば右側に画像、左側にテキストが表示できるようになる。

button.semanticContentAttribute = .forceRightToLeft

文字数でボタンの横幅を変える

button.sizeToFit()

ボタンの角を丸める

button.layer.cornerRadius = ○  //○の中に数値を入れる

タップされた時のボタンの色の設定

button.setTitleColor(○○, for: .highlighted)  //タップされた時のボタンの文字の色を決める、○○の中に色を入れる
button.setBackgroundImage(createImageFromUIColor(color: ○○), for: .highlighted)  //タップされた時のボタンの画像の背景色を決める、○○の中に色を入れる

ボタンが非活性時の色の設定

button.setTitleColor(○○, for: .disabled)  //非活性時のボタンの文字の色を決める、○○の中に色を入れる
button.setBackgroundImage(createImageFromUIColor(color: ○○), for: .disabled)  //非活性時のボタンの画像の背景色を決める、○○の中に色を入れる

createImageFromUIColor(color: ○○)は、これは作られたメソッドなのでそのままコピペしてもエラーになるだけなので、UIColorからUIImageを作るメソッドを作る。このメソッドの意義、実はちゃんとわかってない。

static func createImageFromUIColor(color: UIColor) -> UIImage? {
     let rect = CGRect(x: ○, y: ○, width: ○, height: ○)  //width * height の bitmapを作成、○に数字を入れる
     UIGraphicsBeginImageContext(rect.size)
     let context = UIGraphicsGetCurrentContext()
     context?.setFillColor(〇〇)  //〇〇に色を入れる
     context?.fill(rect)  //bitmapを塗りつぶす
          let image = UIGraphicsGetImageFromCurrentImageContext()  //UIImageに変換
     UIGraphicsEndImageContext()
     return image
}