[OK]ので、インターフェイスビルダーでUILabel
を作成し、「タップして開始」というデフォルトテキストを表示します。
ユーザーがUILabel
をタップすると、IBActionメソッドをトリガーします:-(IBAction)next;
ラベルのテキストを更新して、何か新しいことを言います。
これにより、ボタンを使用して、メソッドからラベルに接続をドラッグし、内部でタッチアップを選択できるようになると、非常に便利です。悲しいかな、葉巻はありません。
とにかく、私の質問は、これを機能させるためにUILabel
をサブクラス化する必要があるのでしょうか?または、ボタンをラベルの上にドラッグしても、不透明度を0%にする方法があります。または、私が見逃しているより簡単な解決策はありますか?
見てみな:
UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];
秘trickは、ユーザーとの対話を可能にすることです。
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";
IBOutletプレフィックスを使用してUILabelインスタンス変数を宣言することにより、インターフェイスビルダーのUILabelオブジェクトにクラスファイルのコードを接続します。
IBOutlet UILabel *label;
その後、インターフェイスビルダーでそれらを接続できます。
UIButtonを使用して、透明にする、つまり画像のないカスタムタイプを作成し、その上にUILabelを追加できます(中央揃え)。次に、通常のボタンイベントを接続します。
Swift
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
}