質問

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");
       }
   }     
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top