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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

button

HTMLで用いる<button>タグです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

4908閲覧

ボタンをタップした後に、touchesBeganメソッドとtouchesMovedメソッドをオーバーライドするには

acid

総合スコア20

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

button

HTMLで用いる<button>タグです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2017/01/16 08:40

overrideに関しまして、質問をさせて頂きます。
質問内容は、下記のとおりです。
■質問
ボタンをタップした後に、
touchesBeganメソッドとtouchesMovedメソッドをオーバーライドするには
どのようなコーディングをすべきでしょうか。
・環境
xcode8/swift3

現在、以下のようなコーディングで
touchesBeganメソッドとtouchesMovedメソッドをオーバーライドしています。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { drawView = DrawView() drawView.frame = canvasView.frame drawView.backgroundColor = UIColor.clear drawView.color = colorArray[colorNum] canvasView.addSubview(drawView) let touch = touches.first! let point = touch.location(in: self.view) drawView.points.append(point) } override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { let touch = touches.first! let point = touch.location(in: self.view) drawView.points.append(point) drawView.setNeedsDisplay() } }

しかしアプリの仕様上、ボタンをタップした後に、
touchesBeganメソッドとtouchesMovedメソッドをオーバーライドさせたいため
以下のようなコーディングをしました。

@IBAction func closeButton(_ sender: UIButton) { mainScrollView.isHidden = true buttonClose.isHidden = true override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { drawView = DrawView() drawView.frame = canvasView.frame drawView.backgroundColor = UIColor.clear drawView.color = colorArray[colorNum] canvasView.addSubview(drawView) let touch = touches.first! let point = touch.location(in: self.view) drawView.points.append(point) } override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { let touch = touches.first! let point = touch.location(in: self.view) drawView.points.append(point) drawView.setNeedsDisplay() } }

このコードでは、xcodeがoverrideを消しなさいというメッセージが表示されます。
しかしoverrideを消しても
touchesBeganメソッドとtouchesMovedメソッドはオーバーライドされません。
(私の文法自体間違っているかもしれないのですが)
ボタンをタップした後に、
touchesBeganメソッドとtouchesMovedメソッドをオーバーライドするには
どのようなコーディングをすべきでしょうか。
ご教示頂けますでしょうか、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

動的にoverrideする/しないというのは無理な気がするので(根拠なし)、フラグを用意して、override処理の実行を制御してみてはどうでしょうか?

swift

1override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 2 super.touchesBegan(touches, with:event) 3 4 if ボタン押したフラグ { 5 /* 6 自前のoverride処理 7 */ 8 } 9}

※未検証です

投稿2017/01/16 08:51

fuzzball

総合スコア16731

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

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

acid

2017/01/18 06:51 編集

プログラミング初心者なものですみません。if文の「ボタンを押したフラグ」をどうように書いたらいいのかわかりません。検索しても解決策が見あたらなかったため、参考になるような記事やコードなどあれば教えて頂けないでしょうか。
fuzzball

2017/01/18 05:32

buttonCloseと同期しているのであれば、 if buttonClose.isHidden { /* 自前のoverride処理 */ } でいけそうですが、どうでしょうか? 独立したフラグが必要なら、 let isOverridden = false を用意して、 if isOverridden { /* 自前のoverride処理 */ } として、overrideを有効にした間だけtrueにすればいいです。
acid

2017/01/18 06:50

アドバイスのコードを少しアレンジさせていただきました。 はじめは、 var isOverridden: Bool = false 次に if isOverridden { /* 自前のoverride処理 */ } overrideを有効にしたいときに、 isOverridden = true 思い描いていたような仕様になりました、有難うございました。
fuzzball

2017/01/18 06:58 編集

あー、letじゃなくてvarでしたね。失礼しました。 ご存知かもしれませんが、型指定のBoolは省略できます。(falseを代入しているのでBool型であると推論できるため) (参考URL) http://qiita.com/yuinchirn/items/8c62c05006c37a5cfe30
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問