gpt4 book ai didi

ios - 自定义单元格内的 UITableViewCell 按钮动画,我得到错误的单元格索引路径以显示动画

转载 作者:行者123 更新时间:2023-11-29 11:56:12 25 4
gpt4 key购买 nike

我在 UITableViewCell 中的按钮动画有问题。

当我按下我的按钮单元格时,我希望它显示动画,但是 UITableViewCell 中按钮的可见和最后一个对象只有它可以显示动画。

我希望我按下 UITableView 单元格内的按钮,indexPath 为 0,而 indexPath 0 的按钮可以显示动画.

@interface ListViewController ()  <UITableViewDataSource,UITableViewDelegate>
{
NSInteger pressedCounts;
}

@property (nonatomic)ListTableViewCell *cell;
@end

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

self.cell = [tableView dequeueReusableCellWithIdentifier:@"listCell" forIndexPath:indexPath];

//Btn setting
[self.cell.listLoveBtn addTarget:self action:@selector(loveBtnPressed:forEvent:) forControlEvents:UIControlEventTouchUpInside];

return self.cell;
}

- (IBAction)loveBtnPressed:(id)sender forEvent:(UIEvent *)event
{

//set button pressed indexpath
UITouch *touch = event.allTouches.anyObject;
CGPoint touchPoint = [touch locationInView:self.listTableView];
NSIndexPath *indexPath = [self.listTableView indexPathForRowAtPoint:touchPoint];

NSLog(@"btn pressed indexpath is %ld",(long)indexPath.row);

//set button pressed animated
[self.cell.listLoveBtn setImage:[UIImage imageNamed:pressedCounts%2==0?@"listUnlikeBtn":@"listLikeBtn"] forState:UIControlStateNormal];

CAKeyframeAnimation *btnAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
btnAnimation.values = @[@(0.1),@(1.0),@(1.5)];
btnAnimation.keyTimes = @[@(0.0),@(0.5),@(0.8),@(1.0)];
btnAnimation.calculationMode = kCAAnimationLinear;

pressedCounts++;

[self.cell.listLoveBtn.layer addAnimation:btnAnimation forKey:@"Animation"];
}

谢谢!

最佳答案

您的代码中有很多问题。

首先删除引用单元格的属性。它没有按照您的想法行事。您也不需要点击按钮的事件。

这需要您按如下方式更新您的 cellForRowAtIndexPath 方法:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
ListTableViewCell *cell = (ListTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"listCell" forIndexPath:indexPath];

//Btn setting
[cell.listLoveBtn addTarget:self action:@selector(loveBtnPressed:) forControlEvents:UIControlEventTouchUpInside];

return cell;
}

对于按钮处理程序,您不需要该事件。只需获取按钮的框架并将其转换为表格 View 的坐标即可。使用它从表格中获取单元格。请注意,按钮处理程序不是 IBAction

还要避免在一行中嵌套大量代码。分割线。当出现问题时,它更易于阅读和调试。

- (void)loveBtnPressed:(UIButton *)button {
CGPoint buttonPoint = CGPointMake(5, 5); // A point within the button
CGPoint tablePoint = [button convertPoint:buttonPoint toView:self.listTableView]; // Convert point to table view coordinates
NSIndexPath *indexPath = [self.listTableView indexPathForRowAtPoint:tablePoint]; // Get the index path

NSLog(@"btn pressed indexpath is %ld",(long)indexPath.row);

//set button pressed animated
ListTableViewCell *cell = [self.listTableView cellForRowAtIndexPath:indexPath]; // Get the cell for the index path
UIImage *image = [UIImage imageNamed:pressedCounts % 2 == 0 ? @"listUnlikeBtn" : @"listLikeBtn"];
[cell.listLoveBtn setImage:image forState:UIControlStateNormal];

CAKeyframeAnimation *btnAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
btnAnimation.values = @[@(0.1),@(1.0),@(1.5)];
btnAnimation.keyTimes = @[@(0.0),@(0.5),@(0.8),@(1.0)];
btnAnimation.calculationMode = kCAAnimationLinear;

pressedCounts++;

[cell.listLoveBtn.layer addAnimation:btnAnimation forKey:@"Animation"];
}

关于ios - 自定义单元格内的 UITableViewCell 按钮动画,我得到错误的单元格索引路径以显示动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38979262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com