抱歉我的英语不好。我想在我的自定义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。这两种方法都有效。
答案 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;
}