質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

13786閲覧

swiftのクラス内で作成したボタンのイベントを発生させたい

sprite

総合スコア63

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

4クリップ

投稿2015/02/23 03:49

いつもお世話になっております。
アイフォンアプリ初心者です。

現在swiftでアイフォンアプリを作成しております。
カレンダーで日付をクリックすると、画面が遷移するような形を作りたいと思っております。
コントロールはStoryBoadではなくコードで書いております。

ViewControllerから呼び出したViewクラスから
さらに呼び出したViewクラスで日付のボタンを生成しました。

その日付のボタンクリックからセグエで別ViewConrollerへ遷移したいと考えています。
しかし、その孫Viewクラスのボタンのクリックイベントの発生方法が分かりません。

構造:ViewContoroller(didloadでクラス呼出し)
⇒ View(カレンダーの全体を描写・処理)
⇒ View(日付が表示されたボタンを配置)

どの場所にどのような記述をすればいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Buttonを押したときに実行されるメソッドを指定したいときには下記のメソッドを使います。

lang

1button.addTarget(self, action: "tapped", forControlEvents: .TouchUpInside)

これはボタンを押したときに
・第1引数に指定したオブジェクト(target)の
・第2引数で指定した名前のメソッド(action)が
・第3引数の条件(controlEvent)で実行される

という意味です。
通常はViewController内でボタンを作成すると思うのでtargetにselfを入れておけば
ViewController内にボタンを押したときの処理を書くことができます。
その処理の中で画面遷移をすればOK

参考ソース

lang

1import UIKit 2 3class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 //カレンダーViewのつもり 9 let baseView = UIView() 10 baseView.frame = CGRectMake(0, 0, 320, 568) 11 baseView.backgroundColor = UIColor.redColor() 12 self.view.addSubview(baseView) 13 14 //カレンダーViewの上に日付ボタンのつもり 15 let button = UIButton() 16 button.setTitle("次へ", forState: .Normal) 17 button.frame = CGRectMake(100, 100, 100, 30) 18 button.addTarget(self, action: "tapped", forControlEvents: .TouchUpInside) 19 baseView.addSubview(button) 20 21 } 22 23 //ボタンが押されたときの処理 24 func tapped() { 25 performSegueWithIdentifier("next",sender: nil) 26 } 27}

StoryboardでSegueにプログラム中で指定したIdentifier(ここでは"next")を指定するのをお忘れなく。

投稿2015/02/24 06:40

jollyjoester

総合スコア1585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sprite

2015/02/26 00:20

返答ありがとうございます! なるほど、addTargetで動作処理を記述するのですね。 すいません、もう一つ気になるのですが、よろしいでしょうか? 上記でいうカレンダーViewと日付ボタンを外部クラスに持っていった時も同じようにViewContoroller上にボタンを押された時の処理を書く形になるのでしょうか?
jollyjoester

2015/02/28 23:37

ViewControllerでなくてもかまいません。 例えばカレンダーViewにボタンを押したときの処理を書きたければ ``` addTarget(カレンダーView, "method名", xxxx) ``` のように書けます。 (この辺の仕組みはResponder Chainというキーワードで調べると吉です。) ただ、今回の場合ボタンを押したときの処理にperformSegueWithIdentifierというViewControllerのメソッドを使っているので外部クラスに持って行った場合はここをうまくごにょごにょする必要がありますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問