UILABELでのタッチイベントの取り扱いとIBACTIONに接続する
-
02-10-2019 - |
質問
さて、私は持っています UILabel
インターフェイスビルダーで作成された「Tap to Begin」のデフォルトのテキストを表示します。
ユーザーがタップするとき UILabel
ibactionメソッドをトリガーしてほしい:-(IBAction)next;
これは、ラベルのテキストを更新して、何か新しいことを言っています。
これにより、接続をメソッドからラベルに単純にドラッグし、ボタンのように内部のタッチアップを選択できる場合は、本当に便利です。しかし、悲しいかな、葉巻はありません。
とにかく、私の質問は、私はサブクラスをしなければならないと思います UILabel
これを機能させるには?または、ラベルの上にボタンをドラッグする方法がありますが、0%不透明にします。それとも、私が欠けているより簡単な解決策はありますか?
解決
見てみな:
UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];
トリックは、ユーザーの相互作用を有効にすることです。
他のヒント
uiLabelは、uiresponderから継承するuiviewから継承します。すべてのuiresponderオブジェクトは、タッチイベントを処理できます。したがって、あなたの見解(uilabelを含む)を知っているクラスファイルでは、次の実装が次のとおりです。
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;
インターフェイスビルダーで、UILABELのタグ値を設定します。 ToucheSbeganメソッドでタッチが発生したら、タグが属するビューのタグ値を確認します。
UITouch *touch = [touches anyObject];
if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";
クラスファイルのコードを、uilabelインスタンス変数をiboutletプレフィックスで宣言することにより、インターフェイスビルダーのuilabelオブジェクトでコードを接続します。
IBOutlet UILabel *label;
次に、インターフェイスビルダーで接続できます。
uibuttonを使用して、画像なしで透過性、すなわちカスタムタイプにし、uilabelを追加します(中心)。次に、通常のボタンイベントを配線します。
スウィフト3
あなたはiboutletを持っています
@IBOutlet var label: UILabel!
ユーザーインタラクションを有効にし、ジェスチャー認識者を追加する
label.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:)))
label.addGestureRecognizer(tapGesture)
そして最後に、タップを処理します
func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) {
// Your code goes here
}