我在UITableViewCell
内有我的按钮动画问题。
当我按下按钮的单元格时,我希望它显示动画,但UITableViewCell
内的按钮的可见和最后一个对象只能显示动画。
我希望我按下UITableView
的{{1}}单元格内的按钮,indexPath
0的按钮就可以显示动画了。
indexPath
谢谢!
答案 0 :(得分:1)
您的代码中存在很多问题。
首先删除属性以引用单元格。它没有按照你的想法去做。你也不需要按钮点击事件。
这要求您按如下方式更新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;
}
对于按钮处理程序,您不需要该事件。只需获取按钮的框架并将其转换为表格视图的坐标即可。用它来从表中获取单元格。请注意,按钮处理程序不是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"];
}