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

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

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

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

1511閲覧

タップしたUILabelを認識し、そのUILabelだけを非表示にする方法が分かりません。

Dave

総合スコア22

iOS

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/07/22 08:51

MacOS Catalina 10.15.4
Xcode 11.5 beta
Swift version 4

ボタンをクリックするとカバーというUILabelを生成し、そのカバーをタップするとカバーが非表示になるような仕様を考えています。
タップしたUILabelを認識し、そのUILabelだけを非表示にする方法が分かりません。
func setcoverの外でtapGestureactionであるhideを設定しなければならず、そうなるとsetcover内で生成したカバーをhide内で操作できず、どうすれば良いのか途方に暮れています…。

色々と勉強不足で大変恐縮ですが、何か良い方法がございましたらご教示頂けると幸いです。
宜しくお願い致します。

swift

1@IBAction func setcover(_ sender: Any) { 2 3 //UILabelのインスタンス作成 4 let cover = UILabel() 5 6 createcard.create(label: cover) 7 8 //カバーの枚数を増加 9 covercount += 1 10 11 //3つで1行となるよう、何枚目かのカバーかによってx,y座標を設定 12 let boxx = standardlength*(1 + 6*( (covercount-1).truncatingRemainder(dividingBy: 3))) 13 let boxy = 100*(ceil(covercount/3)) 14 15 //カバーの座標とサイズを設定 16 cover.frame = CGRect(x: boxx, 17 y: boxy, 18 width: standardlength*4, 19 height: standardlength*4) 20 21 //viewにカバーを追加 22 self.view.addSubview(cover) 23 24 //カバーを管理するために配列に組み込む 25 coverarray.append(cover) 26 27 //UIGestureのインスタンス 28 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(hide(_:))) 29 30 //カバーをタップできるようにする 31 cover.isUserInteractionEnabled = true 32 33 //カバーにタップジェスチャーを追加 34 cover.addGestureRecognizer(tapGesture) 35 36 37 38 } 39 40 41 @objc func hide(_ sender: UITapGestureRecognizer) { 42 //ここの書き方が分かりません 43 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

UITapGestureRecognizer のプロパティである view は、GestureRecognizer が関連づけられた view のオブジェクトなので、これに関連づけられたメソッドなどを操作すれば良さそうに感じますが、いかがでしょうか。

Swift

1 @objc func hide(_ sender: UITapGestureRecognizer) { 2 //ここの書き方が分かりません 3 // 例えばラベルのインスタンスを消す 4 sender.view?.removeFromSuperview() 5 }

投稿2020/07/22 10:48

TsukubaDepot

総合スコア5086

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

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

Dave

2020/07/22 13:52

ご回答ありがとうございます! 期待通りの動きになりました。感動です。 そのような発想というか考えに至るには、どう勉強していけば良いものか悩んでいるのですが、 こうして一つ一つ質問を通して理解を深めていくしかないですかね。 改めて早速のご回答ありがとうございました!!
TsukubaDepot

2020/07/22 15:34

あるいは、単純に UILabel に関連する関数をクラスのトップレベルで(つまり、ほかの IBOutlet と同じレベル)で宣言し、setcover()、hide()両方から見える方法にするというのもあるかと思います。 上記で提案した方法は、 sender.view が何らかの理由(今後の改変など)で UILabel のインスタンスではなかった場合、思わぬトラブルになる可能性もありそうな気がします。 どちらがいいのかは、全体的な設計次第なので、そのあたりは Dave さんにご判断いただくことになりそうです。
Dave

2020/07/23 00:57

追加でありがとうございます。 十分に理解できておらず恐縮ですが、ボタンを押した際に押した回数だけUILabelを生成したいので、予め宣言できない(生成されて初めて認識される)ようになっています。なので、どうしてもsetcover()内でしか扱えず、なんとか全体で扱えるようトップレベルで宣言したcoverarray[]という配列に組み込もうと思ったのですが、良い方法が思い付きませんでした。 とりあえず最初にご教示頂いた方法で対応してみようと思います。ありがとうございました!
TsukubaDepot

2020/07/23 01:32

なるほど、そういう事情なのですね。 それであれば、最初に提案した方法がいいかもしれません。
Dave

2020/07/23 01:51

ご親切にありがとうございました。 機会があればまた宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問