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

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

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

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

Q&A

1回答

517閲覧

[swift4] カスタムクラス内でラベルの名称と値を取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2018/01/21 19:38

タッチイベントを取得してラベルタップ時にメニューを表示しているのですが、
メニューを追加しているカスタムラベルクラス内で、タップしたラベルの名称と値を取得する方法は
あるのでしょうか?

取得した値は、canPerformAction内で表示メニュー選択の条件分けに使用したい。

swift

1// ラベルタップ時にメニューを表示する 2 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 3 super.touchesEnded(touches, with: event) 4 for touch: UITouch in touches { 5 let tag = touch.view!.tag 6 let sender = touch.view! 7 8 switch tag { 9 case 1: 10 //カスタムクラス内で値が取得できないのでここでグローバル変数に値を代入しています 11 checkLabelValue = A.text! 12 let label = sender as! Custom_ALabel 13 label.showMenu(sender) 14 case 2: 15 checkLabelValue = B.text! 16 let label = sender as! Custom_BLabel 17 label.showMenu(sender) 18 default: 19 break 20 } 21 } 22 } 23

swift

1import UIKit 2 3// MARK: カスタムラベルの定義 4class Custom_ALabel: UILabel { 5 6 override var canBecomeFirstResponder: Bool { 7 return true 8 } 9 10 func showMenu (_ sender: Any?) { 11 self.becomeFirstResponder() 12 13 // MenuControllerを生成 14 let menuController: UIMenuController = UIMenuController.shared 15 if !menuController.isMenuVisible { 16 menuController.arrowDirection = UIMenuControllerArrowDirection.up 17 // MenuItmを生成する 18 let menuItem1: UIMenuItem = UIMenuItem(title: "Copy", action: #selector(Custom_ALabel.copy)) 19 let menuItem2: UIMenuItem = UIMenuItem(title: "Paste", action: #selector(Custom_ALabel.paste)) 20 21 // MenuItemを配列に格納する 22 let menuItems: NSArray = [menuItem1, menuItem2] 23 menuController.menuItems = menuItems as? [UIMenuItem] 24 menuController.setTargetRect(self.bounds, in: self) 25 menuController.setMenuVisible(true, animated: true) 26 } 27 } 28 29 // 表示メニューを選択する 30 override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 31 32 // 条件わけに使いたいのですが、ここでラベルの名称と値を取得するにはどう書いたらいいでしょうか? 33 34     if checkLabelValue == "" { 35 return false 36 } else { 37 if action == #selector(Copy) || action == #selector(Paste){ return true } 38 } 39 return false 40 } 41 42 @objc func copy (sender: AnyObject) { 43 print("Copy") 44 45 } 46 @objc func paste (sender: AnyObject) { 47 print("Paste") 48 49 50}

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

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

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

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

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

guest

回答1

0

条件わけに使いたいのですが、ここでラベルの名称と値を取得するにはどう書いたらいいでしょうか?

self.textじゃないのかな?

投稿2018/01/22 02:58

fuzzball

総合スコア16731

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

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

退会済みユーザー

退会済みユーザー

2018/01/22 10:45

回答ありがとうございます。 self.textで値を取得できて一歩前進できました。 で、 selfをプリントしたところ↓となりました。 touch.view!: <Sample.firstValueLabel: 0x7fb8cba4a9c0; baseClass = UILabel; frame = (43 48; 188 36.5); text = '120'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; tag = 1; layer = <_UILabelLayer: 0x60c0002849c0>> ラベル名称"FirstValueLabel"を取得したいのですが、どう記述すればよいでしょうか?
fuzzball

2018/01/22 10:55

ラベル名称ってクラスのことですか?それなら is で判別できると思います。
退会済みユーザー

退会済みユーザー

2018/01/22 11:04

説明が不明瞭ですいません。 取得したいのは、タップされたUILabelの名称です。 Viewcontrollerにアウトレット接続するさいにnameに設定した値です。
fuzzball

2018/01/23 00:27

変数名ということでしょうか? 何をやろうとしているのか意味不明です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問