ios:滚动时自定义表格单元格中的按钮无响应

时间:2015-02-02 07:31:02

标签: ios button cell tablecell

抱歉我的英语不好。我想在我的自定义tablecell中添加一些可点击按钮,它工作正常,但当我向下滚动表格时我遇到了问题。滚动后,单击上方单元格中的按钮时没有响应。但是当我滚动回到单元格的原始位置时,按钮会再次响应。

我把这个

[cell.btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];
cellForRowAtIndexPath方法中的

; 在我向下滚动之前已触发btnPressed。但是在我滚出该单元格原始位置的边界后,btnPressed无法触发。

希望有人能理解我的问题,谢谢。 请告诉我如何使表格滚动按钮响应?提前谢谢


方法1

当我在cellForRowAtIndexPath中尝试使用方法addtarget时,编码就像这样

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

            static NSString *cellIdentifier = @"CustomTableViewCell";
            CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
            if (cell == nil) {
                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:cellIdentifier owner:self options:nil];
                cell = [nib objectAtIndex:0];
            }
            [cell.btn addTarget:self action:@selector(btnPressed:) 
            return cell;
}

方法2

我还尝试了另一种不在cellForRowAtIndexPath

中添加目标的方法

这是代理

的代码

在customcell.h中,我添加了这个

@protocol CustomCellDelegate <NSObject>
- (void)didClickOnbtn;
@end

在customcell.m中,我添加了这个

@interface CustomTableViewCell()
@property (nonatomic, strong) NSDictionary *currentDict;
@property (nonatomic,assign) id<CustomCellDelegate>delegate;
@end

- (IBAction)didClickOnbtn:(id)sender {
    if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOnbtn)]) {
        [self.delegate didClickOnbtn];
    }
}

我已将自定义单元格委托设置为tableview

在tabelview控制器中的

我也有方法didClickOnbtn<CustomCellDelegate>

并且按钮可以在滚动表之前在tableview控制器响应中触发didClickOnbtn方法。


更新: 我在表格中创建了一个节标题视图。我发现当我删除部分标题视图时,问题就解决了。虽然我不知道为什么节标题视图会使按钮禁用,但它现在运行良好。希望这可以帮助那些与我情况相同的人。

P.S。这两种方法都有效。

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我使用解决方法来使用Touch Down而不是Touch Up Inside。这不是一个完美的解决方案,但是即使滚动没有完成,也可以通过调用触摸的IBAction来解决这个问题。

答案 1 :(得分:0)

您如何设置按钮的框架?     是参考细胞框架?或硬编码如下

        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self 
               action:@selector(aMethod:)
     forControlEvents:UIControlEventTouchUpInside];
    [button setTitle:@"MyButton" forState:UIControlStateNormal];
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); // example co-ordinate
    [cell addSubview :button] ;

在这种情况下,向下滚动按钮坐标将不会改变,并且不会正常工作,因为你说最好的方法是正确的

为UITableViewCell创建一个接口文件,在那里放置一个按钮并进行接线 这将为您解决滚动问题。 你也可以尝试这样做。

button.frame = CGRectMake(cell.frame.origin.x+samplevalue ,cell.frame.origin.y+sampleValue , 160.0, 40.0);

希望这有帮助。

答案 2 :(得分:0)

不建议在tableViewCellForRowAtIndexPath:API中添加按钮的目标。当app需要显示单元格时,此API会被多次调用。

将此代码移至单元类。如果没有完成,请创建自定义类并添加此代码。在按钮的操作方法中,引用您的控制器并调用一些为单元格执行操作的API(比如打开其他控制器等)。您可以将视图控制器作为单元的委托用于此目的。

希望这种改变可以解决你的问题

答案 3 :(得分:0)

我假设您要将按钮添加到tableView的第二个单元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
{
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

if (indexPath.row == 0)
{
    cell.textLabel.text = @"Cell1";
}
else if (indexPath.row == 1)
{
   //Add button to cell and use different reuseIdentifier
   UITableViewCell *cell1 = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"btnCell"];
    UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(cell1.frame.origin.x+10, cell1.frame.origin.y, self.view.frame.size.width-20, cell1.frame.size.height-10)];
    [button setTitle:@"ButtonTitle" forState:UIControlStateNormal];
    shareButton.backgroundColor = [UIColor grayColor];
    [cell1 addSubview:button];
    [shareButton addTarget:self action:@selector(buttonTapped) forControlEvents:UIControlEventTouchUpInside];
    return cell1;
}

//Your code...

return cell;
}