单击时,UIButton不会检测触摸事件

时间:2012-09-10 12:24:14

标签: objective-c uitableview uibutton

我创建了一个包含自定义单元格的tableview(我已经子类化了UITableViewCell)。 我在其中创建了几个UIButtons。在.h文件中声明:

@property (nonatomic, strong) UIButton *myButton;

,这在.m文件中:

myButton = [[UIButton alloc] initWithFrame:CGRectMake(-100.0, 285.0, 60.0, 30.0)];
myButton.titleLabel.font = [UIFont boldSystemFontOfSize:16.0];
myButton.backgroundColor = [UIColor clearColor];
[myButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[myButton setTitle:@"text" forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(myButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:myButton];

我正在使用UIPanGestureRecognizer向右移动单元格,然后显示UIButton(请注意它位于负X索引中)。
我可以看到它,但它不可点击(我想它不再在视图中了。) 有关如何使其可点击的任何建议吗?

更多细节:
在单元格的初始化中,我正在做:

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
panGesture.delegate = self;
[self.contentView addGestureRecognizer:panGesture];

然后我实施了手势:

-(void)handlePanGesture:(UIPanGestureRecognizer *)sender {
    CGPoint translate = [sender translationInView:self.contentView];
    CGRect currentFrame = self.contentView.frame;
switch ([sender state]) {        
    case UIGestureRecognizerStateChanged:

        currentFrame.origin.x = translate.x;
        self.contentView.frame = currentFrame;

        break;
    default:
        break;
}    
}

当框架向右移动时 - 显示按钮。但不是可点击的......

1 个答案:

答案 0 :(得分:4)

如果按钮的框架在其父框架的框架之外,它将不会注册触摸。在这种情况下,您提到当按钮的x位置设置为-100时,按钮停止工作。这是有道理的,因为它在触摸区域之外。

您实施的平移手势会移动单元格的视图,因此当按钮可能出现在屏幕上时,它仍然位于单元格视图的外部,因此无法接收触摸。

解决此问题的一个可能建议是从一开始就让你的细胞更大。因此,例如,如果单元格的帧大小当前为0,0,320,44,则可以将其设置为-100,0,420,44并相应地放置单元格的内容。现在,您的按钮的框架将变为0,0,x,y,它将位于单元格的视图内,并且能够接收触摸。