0

カスタム ヘッダー クラスにクリック イベントを追加したいと考えています。以下は私のコードです。ヘッダー領域をクリックすると、EXC_BAD_ACCESS が表示されます。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        UITapGestureRecognizer *singleFingerTap =
        [[UITapGestureRecognizer alloc] initWithTarget:self
                                                action:@selector(handleSingleTap:)];
        [self.view addGestureRecognizer:singleFingerTap];

    }

    return self;
}

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
    CGPoint location = [recognizer locationInView:[recognizer.view superview]];

    //Do stuff here...
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
4

4 に答える 4

1
//At View did load
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
    tapRecognizer.numberOfTapsRequired = 1;
    [self.view addGestureRecognizer:tapRecognizer];

- (void)tapDetected:(UITapGestureRecognizer *)tapRecognizer
{
   //addcodehere
}
于 2013-02-13T11:39:50.267 に答える
0

カスタム ヘッダー クラスがUIView meansのサブクラスである場合は、self代わりに使用しますself.view

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
tapRecognizer.numberOfTapsRequired = 1;

[self.view addGestureRecognizer:tapRecognizer];

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
    CGPoint location = [recognizer locationInView:[recognizer.view superview]];

//Do stuff here...
}
于 2013-02-13T11:37:49.597 に答える
0

これはあなたに役立つかもしれません......

 {
    UITapGestureRecognizer *tapGestureRecognizer;
    self.view.backgroundColor = [UIColor whiteColor];
    /* Create the Tap Gesture Recognizer */
    self.tapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                 initWithTarget:self action:@selector(handleTaps:)];
   self.tapGestureRecognizer.numberOfTouchesRequired = 2;

    self.tapGestureRecognizer.numberOfTapsRequired = 3;
    [self.view addGestureRecognizer:self.tapGestureRecognizer];
}
- (void) handleTaps:(UITapGestureRecognizer*)paramSender
{
    NSUInteger touchCounter = 0; for (touchCounter = 0;
                                      touchCounter < paramSender.numberOfTouchesRequired;
                                      touchCounter++)
    {
        CGPoint touchPoint =
        [paramSender locationOfTouch:touchCounter inView:paramSender.view];
        NSLog(@"Touch #%lu: %@",(unsigned long)touchCounter+1, NSStringFromCGPoint(touchPoint));
    }
}
于 2013-02-13T11:40:52.620 に答える
0

init メソッドで行う代わりに、ViewDidLoad で行うようにしてください。

- (void)viewDidLoad
{ 
    [super viewDidLoad];

    UITapGestureRecognizer *singleFingerTap =
    [[UITapGestureRecognizer alloc] initWithTarget:self
                                            action:@selector(handleSingleTap:)];
    [self.view addGestureRecognizer:singleFingerTap];
  // Do any additional setup after loading the view from its nib.
}

そして、このメソッドをクラス拡張に含めます。

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer ;

または、viewDidLoad の前に記述します。

于 2013-02-13T11:41:14.647 に答える