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

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

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

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

Q&A

2回答

2523閲覧

classからUIButtonを作成したい

corn

総合スコア10

Swift

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

0グッド

0クリップ

投稿2016/07/01 03:11

viewcontrollerに複数のボタンを作成したいため、classを使って制御をしようと思いこのサイトを参考に作成しましたが、
self.view.addSubview(myButton)のところでviewのメンバにSubjectが入っていないことでエラーが発生しました。
self.viewのところをviewcontrollerに関連付けるには、どう記述したらよいのでしょうか。

swift

1import UIKit 2import Foundation 3 4 5private class Subject: UIButton{ 6 7 private var myButton: UIButton! 8 let string = "" 9 10 func makeButton(xx:Int,yy:Int){//場所を指定する引数 11 init(frame: CGRect){ 12 suprt.init(frame:frame) 13 } 14 // Buttonを生成する. 15 myButton = UIButton() 16 17 // サイズを設定する. 18 myButton.frame = CGRectMake(0,0,200,40) 19 20 // 背景色を設定する. 21 myButton.backgroundColor = UIColor.redColor() 22 23 // 枠を丸くする. 24 myButton.layer.masksToBounds = true 25 26 // タイトルを設定する(通常時). 27 myButton.setTitle("ボタン(通常)", forState: UIControlState.Normal) 28 myButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 29 30 // タイトルを設定する(ボタンがハイライトされた時). 31 myButton.setTitle("ボタン(押された時)", forState: UIControlState.Highlighted) 32 myButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Highlighted) 33 34 // コーナーの半径を設定する. 35 myButton.layer.cornerRadius = 20.0 36 37 // ボタンの位置を指定する. 38 myButton.layer.position = CGPoint(x: xx, y:yy) 39 40 // タグを設定する. 41 myButton.tag = 1 42 43 // イベントを追加する. 44 myButton.addTarget(self, action: Selector("onClickMyButton:"), forControlEvents: .TouchUpInside) 45 46 // ボタンをViewに追加する. 47 self.view.addSubview(myButton) 48 } 49 50 required init?(coder aDecoder: NSCoder) { 51 fatalError("init(coder:) has not been implemented") 52 } 53 54}

###補足情報
Xcode7.3.1

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

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

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

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

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

guest

回答2

0

Subjectを生成した人がviewcontrollerにaddSubViewした方が良いと思います。

投稿2016/07/01 03:56

fuzzball

総合スコア16731

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

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

0

とりあえずやりたいことは以下でできると思いますが、、、
このコードも強引でサブクラスでaddSubview等は可読性の面からお勧めしません。

swift

1// 使用するクラス 2import UIKit 3 4class ViewController: UIViewController { 5 6 var button: Subject! 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 // Subjectボタンの生成 12 button = Subject(frame: CGRect(x: 100, y: 100, width: 150, height: 50), vc: self) 13 } 14 15 func onClickMyButton(sender: UIButton) { 16 print("Push Button!") 17 } 18} 19 20// カスタムボタンクラス 21class Subject: UIButton { 22 let string = "" 23 24 init(frame: CGRect, vc: UIViewController) { 25 super.init(frame:frame) 26 27 makeButton(frame.origin.x, yy: frame.origin.y, vc: vc) 28 } 29 30 func makeButton(xx:CGFloat, yy: CGFloat, vc: UIViewController){ //場所を指定する引数 31 32 // 背景色を設定する. 33 self.backgroundColor = UIColor.redColor() 34 35 // 枠を丸くする. 36 self.layer.masksToBounds = true 37 38 // タイトルを設定する(通常時). 39 self.setTitle("ボタン(通常)", forState: UIControlState.Normal) 40 self.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) 41 42 // タイトルを設定する(ボタンがハイライトされた時). 43 self.setTitle("ボタン(押された時)", forState: UIControlState.Highlighted) 44 self.setTitleColor(UIColor.blackColor(), forState: UIControlState.Highlighted) 45 46 // コーナーの半径を設定する. 47 self.layer.cornerRadius = 20.0 48 49 // ボタンの位置を指定する. 50 self.layer.position = CGPoint(x: xx, y:yy) 51 52 // タグを設定する. 53 self.tag = 1 54 55 // イベントを追加する. 56 self.addTarget(self, action: Selector("onClickMyButton:"), forControlEvents: .TouchUpInside) 57 58 // ボタンをsuperViewに追加する. 59 vc.view.addSubview(self) 60 } 61 62 func onClickMyButton(sender: UIButton) { 63 self.sendActionsForControlEvents(.TouchUpInside) 64 print("Push Button!") 65 } 66 67 required init?(coder aDecoder: NSCoder) { 68 fatalError("init(coder:) has not been implemented") 69 } 70}

投稿2016/07/01 03:43

_Kentarou

総合スコア8490

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

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

corn

2016/07/01 04:33

載せていただいたコードをもとに自分のものに入れてみましたが、ボタンを離した時の動作がうまくいきませんでした。 ボタンの動作の部分を以下のコードに書き換えたのですが、AppDelegateのところでSignal SIGABRTが出てきてしまいました。 どのように対処したら良いのでしょうか。 //使用するクラス func onClickMyButton(sender: UIButton,vc: ThirdViewController) { print("Push Button!") } //カスタムボタンクラス func onClickMyButton(sender: UIButton, vc: UIViewController) { self.sendActionsForControlEvents(.TouchUpInside) print("Push Button!") }
_Kentarou

2016/07/01 11:37

引数を2つ渡すことはできません。 1つでも任意の引数を渡すことはできないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問