我正在尝试实施一个" extras"我正在创建的应用程序的菜单。基本上我有一个UITableView有多种类型的单元格,当用户在单元格上向左滑动时,我希望能够动态显示它们" extras"他们可以做到。例如,在帖子上,他们可以滑过,然后查看共享等选项,例如...等。如果您在ios上使用了Alien Blue应用程序用于Reddit,那么这就是我想要做的......
到目前为止,我已经使用滑动识别器工作,它可以正确识别单元格的类型......我只是不知道如何启动子视图编程...
我是否只是将每个单元格放大并隐藏附加内容直到滑动,或者在我去的时候动态地为每个单元格添加视图...
感谢您的任何建议或帮助
如果需要,我可以提供代码....
A
答案 0 :(得分:3)
我认为你是对的,至少,这就是我在我的牢房里做的事情。
唯一的区别是我没有使单元格宽度大于窗口宽度。我添加了一个带有额外内容的视图,在我的例子中,它是一个删除按钮,在常规的cell.contentview下。然后当单元格从右向左检测到滑动时,它将调用一个函数来处理手势。
因为我希望用户在将单元格向左拖动时看到该删除按钮,并在将单元格平移到足够远时显示该按钮
这是我如何处理平移手势的片段,
CGPoint _originalTouchPoint;
- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
//save the original touch point when pan starts
_originalTouchPoint = [recognizer locationInView:_tableView];
break;
case UIGestureRecognizerStateChanged:
[self handlePan:recognizer];
break;
case UIGestureRecognizerStateEnded:
[self panEnded:recognizer];
break;
default:
break;
}
}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{
MyCell *ourCell = (MyCell *)recognizer.view;
CGPoint touchPoint = [recognizer locationInView:_tableView];
float movedDistance = (_originalTouchPoint.x - touchPoint.x);
if(movedDistance < 0)
movedDistance = 0;
float maxX = ourCell.deleteButton.frame.size.width;
float ourTranslation = MAX(-1 * ourCell.deleteButton.frame.size.width, -1 * movedDistance);
ourCell.contentView.transform = CGAffineTransformMakeTranslation(ourTranslation, 0.0f);
// i only show the button when user pan all the way though
_shouldDeleteButtonShow = movedDistance / maxX >= 1.0;
}
- (void)panEnded:(UIPanGestureRecognizer *)recognizer
{
MyCell *ourCell = (MyCell *)recognizer.view;
if (_shouldDeleteButtonShow)
{
//do whatever you want in this case
}
else
{
//move the cell back to normal
[UIView animateWithDuration:0.3
animations:^
{
ourCell.contentView.transform = CGAffineTransformIdentity;
}];
}
}
这些是我的代码,也许不是你想要的完全正常工作,但希望这能让你大致了解如何做到这一点