我基本上有一个UITableViewCell类,当使用Pan Gesture滑动单元格时会出现一个自定义删除按钮。
像这样的东西。 _delBtn是我的删除按钮。单击它应该删除TableCell。 请帮帮我
- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{
CGPoint translation = [recognizer translationInView:self];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:_baseView];
if (recognizer.state == UIGestureRecognizerStateEnded)
{
translation.y = 0;
CGPoint velocity = [recognizer velocityInView:_baseView];
CGFloat magnitude = sqrtf((velocity.x * velocity.x));
CGFloat slideMult = magnitude / 1000;
NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult);
float slideFactor = 0.1 * slideMult;
velocity.x = velocity.x + 1000;
velocity.y = 0;
CGPoint finalPoint = CGPointMake(recognizer.view.center.x + (velocity.x * slideFactor),
recognizer.view.center.y + (velocity.y * slideFactor));
finalPoint.x = MIN(MAX(finalPoint.x, 0), _baseView.bounds.size.width);
finalPoint.y = MIN(MAX(finalPoint.y, 0), _baseView.frame.size.height);
[UIView animateWithDuration:slideFactor*2 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
recognizer.view.center = finalPoint;
} completion:nil];
if (finalPoint.x >= 195)
{
_delBtn = [[UIButton alloc] initWithFrame:CGRectMake(5, 10, 60, 60)];
[_delBtn setImage:[UIImage imageNamed:@"delBtn3.jpg"] forState:UIControlStateNormal];
[_delBtn addTarget:self action:@selector(deleteClicked) forControlEvents:UIControlEventTouchUpInside];
_delBtn.hidden = NO;
[_baseView insertSubview:_delBtn atIndex:0];
_delBtn.alpha = 0;
[UIView animateWithDuration:slideFactor delay:0.4 options:UIViewAnimationOptionCurveLinear animations:^{
recognizer.view.center = finalPoint;
} completion:nil];
答案 0 :(得分:1)
在deleteClicked
方法中,您需要让UITableView
删除该单元格。单元格需要引用包含它的UITableView
以及它在表格中表示的行和部分的知识。
可以使用UITableView
属性获取self.superview
父级,但在您自己的自定义属性中存储弱引用可能更安全,或者更好的是,{{1}的引用管理UIViewController
的类。这样,您只需在控制器中创建一个方法即可调用以删除单元格。
您还需要创建一个属性来存储您的UITableView
当前在表中所代表的NSIndexPath
,如果您还没有访问此类信息的其他自定义属性细胞类。最初创建或取消UITableViewCell
时,您将在UITableViewDataSource
方法tableView:cellForRowAtIndexPath:
中设置这些属性。
在UITableViewCell
方法中,您可以在deleteClicked
中调用该方法,例如UIViewController
,并将其传递给需要删除的单元格的deleteCellAtIndexPath:
。
在这个NSIndexPath
中你会做两件事。首先,通过删除要删除的单元格的数据对象来修改deleteCellAtIndexPath:
的后备数据源。这可能是某种UITableView
。
删除支持数据后,调用NSMutableArray
上的方法deleteRowsAtIndexPaths:withRowAnimation:
,将UITableView
作为NSIndexPath
中的唯一对象传递给它。然后应删除您的单元格,并使用NSArray
参数指定动画。有关这些方法的详细信息,请参阅UITableView
documentation。