Swift

Swift:UIButtonをコードだけで実装するメモ!addTargetの使い方!


今回はUIButtonをコードだけで実装します。

UIButtonをコードだけで実装するとなると、
心配なことがあります!

それは、
『IBActionを使えない』
ということです。

この{}内にUIButtonがタップされた際の処理を書きよすよね。

でもコードだけで実装する場合、
RUNしなければUIButtonは出てきません!
なのでコードとStoryBoard上のUIを結びつける動きはできないのです。。。

それらを解決するのが
『addTarget』です!

addTargetとは??

addTargetとは、
イベントを追加するメソッドです。

こちらを参考に作成させていただきます。感謝。
002 UIButtonでボタンを表示 · GitBook

 

まずはこんな感じにしましょう

UIButtonのインスタンス化

はUIButtonのインスタンスを作成します。

UIButtonのサイズと座標

このように指定します。

x座標、y座標、width(横幅)、height(高さ)
をいっぺんに指定します。
注意しなければならないのは
(x = 0,y = 0)は左上になるということです。

中学生の頃に習った数学で言う所の『原点』が それです。
f:id:jumprails3303:20161124215756p:plain

UIButtonのbackgroundColorの指定

 

とこのように指定します。
UIColorの後ろに色を指定します。

UIButtonのテキスト

このままだと、
ボタンに全く文字がないので文字をつけましょう。

setTitleの第一引数に文字を入れます。””で括るのがミソです。
第二引数の.normalはボタンの通常時を指しています。
通常時があるということは、そうじゃない時もあります。今回は省きます。

ここでRUNしてみてください。
おそらく真っさらな画面だと思います。
それを解決するのが、
『addSubview』!!!!

UIButtonをaddSubviewで表示

これは
ViewControllerのViewに実際に表示するメソッドです。引数に表示させたいものを入れます。(今回はbutton)

これをすることによってRUNした時に表示されます。

RUNしてみてください。
表示されましたか?

UIButtonにイベントを追加:addTarget

ようやくたどり着いました。
『addTarget』です!

これを追加しましょう。

actionに追加したいイベントを記述します。
今回はchangeColorというイベントを追加しました。
viewDidLoadにこれを足してください。

タップすると色がdarkGrayに変化します。darkGrayを選択する自分のセンスに脱帽です。おされ。

これのforの.touchUpInsideは、
『buttonの内側をタップした時にイベントが発動しますよ』
と指定してます。

最終的にはこうなります。

 


コメント

  1. けい より:

    やりたいことに対して参考になりました。
    ところで例えばUIButtonをコードだけ実装する時サイズと座標を指定しないといけないと思うのですが例えばtableView内のcellにbuttonを入れたい場合はどのようにしたら良いのでしょうか?
    お忙しと思われますがもし宜しければ教えて頂けないでしょうか?

    1. ささお より:

      このようになるかと思います。
      init時に配置したいUIButtonを生成して、UITableViewCellのcontentViewに配置します。

      class TableViewCell: UITableViewCell {

      override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
      super.init(style: style, reuseIdentifier: reuseIdentifier)
      // ここが大事
      let button = UIButton(frame: CGrect(x: 0,y: 0,width: 100, height: 100))
      self.contentView.addSubview(button)

      }

      required init?(coder aDecoder: NSCoder) {
      fatalError(“init(coder:) has not been implemented”)
      }

      }

コメントを残す

*