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

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

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

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

2回答

2347閲覧

【swift】textfieldにtoolbarをつけ、クラスとして切り出したい

nyancoro

総合スコア75

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2015/12/31 02:02

編集2015/12/31 09:45

texfiledにツールバーとそのアイテムをつけるところまでは出来ています。
その後それを使い回しやすいようにクラス化しようと思った所でつまづいてしまいました。

以下のようにクラスに切り出したのですが、ツールバーアイテムに設定したactionが反応しません。
どのようにコードを修正したら良いでしょうか?ご教授頂ければ幸いですm(__)m

swift

1class ToolbarCreate{ 2 var view: UIView! 3 var textField: UITextField! 4 5 init(view: UIView 6 , textField: UITextField){ 7 self.view = view 8 self.textField = textField 9 } 10 11 func setToolbar(){ 12 let toolBar = UIToolbar(frame: CGRectMake(0, self.view.frame.size.height/6, self.view.frame.size.width, 40.0)) 13 toolBar.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0) 14 let toolBarBtnCancel = UIBarButtonItem(title: "キャンセル", style: .Plain, target: self, action: "tappedToolBarBtnCancel:") 15 let flexibleItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) //完了ボタンを右につけるためのスペーサー 16 let toolBarBtnDone = UIBarButtonItem(title: "完了", style: .Plain, target: self, action: "tappedToolBarBtnDone:") 17 toolBar.items = [toolBarBtnCancel, flexibleItem, toolBarBtnDone] 18 textField.inputAccessoryView = toolBar 19 } 20 21 //キャンセルボタンを押した場合 22 func tappedToolBarBtnCancel(sender: UIBarButtonItem) { 23 textField.resignFirstResponder() 24 } 25 26 //完了ボタンを押した場合 27 func tappedToolBarBtnDone(sender: UIBarButtonItem) { 28 textField.resignFirstResponder() 29 } 30}

【追記】以下呼び出しです。

swift

1let toolbarCreate = ToolbarCreate(view: self.view, textField: textFieldBirth) 2 toolbarCreate.setToolbar()

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

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

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

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

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

Stripe

2015/12/31 06:35

ToolbarCreateのインスタンスは、どのように取り扱っていますか?
nyancoro

2015/12/31 09:46

追記しましたので宜しくお願いします!m(__)m
guest

回答2

0

以下の①、②の2点を変更して実行してみてください。

swift

1class ViewController: UIViewController, UITextFieldDelegate { 2 3 // Storyboadに配置したTextField 4 @IBOutlet weak var textF: UITextField! 5 6 // ①インスタンス変数で保持 7 var toolbarCreate: ToolbarCreate! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 toolbarCreate = ToolbarCreate(view: self.view, textField: self.textF) 13 toolbarCreate.setToolbar() 14 } 15} 16 17// ②NSObjectを継承するようにしてください。 18class ToolbarCreate: NSObject { 19 20}

投稿2016/01/01 11:56

_Kentarou

総合スコア8490

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

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

nyancoro

2016/01/06 01:36

なぜ「NSObjectを継承する」のですか?
guest

0

ベストアンサー

多分、ToolbarCreateのインスタンスを使い捨てにしているのが原因です。
ViewControllerなどのインスタンス変数にするなどして、破棄されないように保持してください。

投稿2015/12/31 12:41

Stripe

総合スコア2183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問