1

I haveUIScrollViewと this の中に I have がありUILabelsます。のタッチイベントを検出する必要がありますUILabels。現時点では、2 番目のラベル内のみのタッチを検出しています。最初は無視されます。

私はコードを持っています -

UIScrollView の作成

backGroundView = [[UIScrollView alloc] init];
backGroundView.frame= self.view.frame;
backGroundView.userInteractionEnabled = YES;
[backGroundView setScrollEnabled:YES];
backGroundView.showsVerticalScrollIndicator = YES;
backGroundView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
backGroundView.delegate = self;

[self.view addSubview:backGroundView];

の作成UILabel

UILabel *OneDay = [[UILabel alloc] initWithFrame:CGRectMake(15, stockChart.bounds.origin.y + stockChart.bounds.size.height + 35, 40, 30)];
OneDay.text = @"1d";
OneDay.tag = 1;
OneDay.userInteractionEnabled = YES;
OneDay.layer.borderColor = [UIColor grayColor].CGColor;
OneDay.layer.borderWidth = 1.0f;
OneDay.textAlignment = UITextAlignmentCenter;
[OneDay addGestureRecognizer:detectTimeFrameChange];
[backGroundView addSubview:OneDay];

UILabel *FiveDay = [[UILabel alloc] initWithFrame:CGRectMake(45, stockChart.bounds.origin.y + stockChart.bounds.size.height + 35, 40, 30)];
FiveDay.text = @"5d";
FiveDay.tag = 2;
FiveDay.userInteractionEnabled = YES;
FiveDay.layer.borderColor = [UIColor grayColor].CGColor;
FiveDay.layer.borderWidth = 1.0f;
FiveDay.textAlignment = UITextAlignmentCenter;
[FiveDay addGestureRecognizer:detectTimeFrameChange];
[backGroundView addSubview:FiveDay];

ジェスチャ レコグナイザの作成

    UITapGestureRecognizer *detectTimeFrameChange = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(timeFrameLabelTapped:)];
detectTimeFrameChange.numberOfTapsRequired = 1;
[backGroundView addGestureRecognizer:detectTimeFrameChange];

ハンドリングジェスチャー

-(void)timeFrameLabelTapped:(UITapGestureRecognizer*)recognizer{
    if (recognizer.view.tag == 1) {
        NSLog(@"One pressed");
    }
    else if (recognizer.view.tag == 2){
        NSLog(@"2 pressed");
    }
}
4

5 に答える 5

3

これを使用できます:

    UITapGestureRecognizer *labelTap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(labelTapped)];
    labelTap.numberOfTapsRequired=1;
    [yourLabel addGestureRecognizer:labelTap];

labelTapped メソッド内でタッチ タップ イベントを処理します。

-(void)labelTapped
{
  //your code to handle tap
}
于 2013-04-19T06:33:17.797 に答える
0

touchesBegan はどこに書いたのですか?

ラベルのタッチを検出する場合は、ラベルのサブクラスを作成し、そこに touchesBegan を記述してタッチ イベントを検出する必要があります。

于 2013-04-19T06:33:12.133 に答える
0

UIScrollviewタップ ジェスチャをラベルに追加する要件を取得するために、タッチ イベントが検出されません。

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured)];
        [OneDay addGestureRecognizer:singleTap]; 

  -(void)singleTapGestureCaptured{

        NSLog(@"touch detected");
}
于 2013-04-19T06:33:27.420 に答える
0

そのようなタップジェスチャー認識を使用して見つけることができます...

UITapGestureRecognizer *singleFingerTap = 
  [[UITapGestureRecognizer alloc] initWithTarget:self 
                                          action:@selector(handleSingleTap:)];
[self.scrollview addGestureRecognizer:singleFingerTap];

//The event handling method
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer
{
    if(recognizer.view.tag == 1){}
    //Do stuff here...
}
于 2013-04-19T06:33:54.260 に答える
0

ここでの問題は、複数のビューに同じジェスチャ認識機能を使用しようとしていることです。ジェスチャ レコグナイザーは、一度に 1 つのビューにのみアタッチできます。レコグナイザーが現在接続されているビューであるため、最後のビューからのみイベントを受信して​​います。この問題を解決するには、タッチを検出するビューごとにジェスチャ レコグナイザーを作成するだけです。

于 2013-05-25T15:29:41.803 に答える