UILabel:ラベルでuserInteractionEnabledメソッドを使用する
-
03-07-2019 - |
質問
UILabelでuserInteractionEnabledメソッドを使用して、ラベルをボタンのように振る舞う(またはメソッドを起動する)ことを許可している人がいるかどうか疑問に思っています。どんな助けも大歓迎です。乾杯!
Update(4/30/09 @ 1:07pm)明確化:標準のInfoButtonがあり、その横に「settings」というテキストのラベルを配置したい。ラベルをボタンのように機能させたい(設定画面に反転します。したがって、基本的には、既に定義済みのshowSettinsViewを" infoLabel"ラベルに関連付ける必要があります。ユーザーはinfoButtonまたはinfoLabelとメソッドをクリックします発射します。
infoButtonはすでに機能しており、IBActionを使用してメソッドをトリガーしています。同じ方法を実装するためにラベルを接続する方法を知りたいです。以上です。乾杯!
解決
userInteractionEnabled
はメソッドではなくプロパティです。ただし、これを YES
に設定して、イベントが UIView
スーパービューを通過できるようにする必要があると思います。
やりたいことは、 UIButton
と UILabelを含む
サブビュー。 UIView
の touchesBegan:withEvent:
メソッドをオーバーライドすることです
このメソッド内で、 UITouch
タッチのいずれかが UILabel
の境界内に収まるかどうかをテストします。
つまり、 CGPoint
要素 [touch locationInView]
は CGRect
要素 [infoLabel bounds] コード>?このテストを実行するには、
CGRectContainsPoint
関数を調べます。
その場合、 UIButton
と同じ IBAction
セレクターを呼び出す NSNotification
を起動します。
他のヒント
別の解決策は、 UILabel
の代わりに、タイプがcustomに設定された UIButton
を使用することです。これにより、2番目のボタンは UILabel
のようになり、 showSettingsView
メソッドをトリガーするように設定できます。
2009年4月30日のAlexに同意します。UIButtonを使用したくない場合、私の提案はそれに追加するだけです。私がそれを解決したのは、UILabelを作成することでした
- (id)initWithFrame:(CGRect)frame
{
label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)];
...
[label setUserInteractionEnabled: YES];
[self addSubview: label];
}
その後、touchesBegan、touchesEndedなどのtouches *メソッドを次のようにオーバーライドできます
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
UITouch *touch = [touches anyObject];
if([touch view] == label) {
NSLog(@"I've been touched");
}
}