我有一个UITableView,用户可以向左滑动以显示动作(如iOS 8邮件).这一切都按预期工作.当用户点击单元格的某个部分时,我想触发这个.如何以编程方式调用此幻灯片动作?
当前行为:用户必须向左滑动单元才能公开操作按钮.
所需行为:用户在单元格上点击(操作按钮).单元格滑过以公开操作按钮.
解决方法
那么我找不到一个方法来编程,但是我想出了这个解决方法.当用户点击单元格时,我将鼠标左键动画(平移),立即显示“滑动我”按钮.这很快就颠倒了,所以细胞恢复正常.这提供了一个视觉提示,让用户知道他们可以滑动单元格:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; __block UILabel *swipeLabel = [[UILabel alloc]initWithFrame:CGRectMake(cell.bounds.size.width,200,cell.bounds.size.height)]; swipeLabel.text = @" Swipe Me"; swipeLabel.backgroundColor = [UIColor greenColor]; swipeLabel.textColor = [UIColor whiteColor]; [cell addSubview:swipeLabel]; [UIView animateWithDuration:0.3 animations:^{ [cell setFrame:CGRectMake(cell.frame.origin.x - 100,cell.frame.origin.y,cell.bounds.size.width,cell.bounds.size.height)]; } completion:^(BOOL finished) { [UIView animateWithDuration:0.3 animations:^{ [cell setFrame:CGRectMake(cell.frame.origin.x + 100,cell.bounds.size.height)]; } completion:^(BOOL finished) { [swipeLabel removeFromSuperview]; swipeLabel = nil; }]; }]; }
希望这有助于某人.
请注意,您需要将tableViewCell的选择类型设置为none.否则灰色的酒吧会掩盖它.
更新.我以为我会发布更多Swifty版本:
func previewActions(forCellAt indexPath: IndexPath) { guard let cell = tableView.cellForRow(at: indexPath) else { return } let label: UILabel = { let label = UILabel(frame: CGRect.zero) label.text = " Swipe Me " label.backgroundColor = .blue label.textColor = .white return label }() // figure out the best width and update label.frame let bestSize = label.sizeThatFits(label.frame.size) label.frame = CGRect(x: cell.bounds.width - bestSize.width,y: 0,width: bestSize.width,height: cell.bounds.height) cell.insertSubview(label,belowSubview: cell.contentView) UIView.animate(withDuration: 0.3,animations: { cell.transform = CGAffineTransform.identity.translatedBy(x: -label.bounds.width,y: 0) label.transform = CGAffineTransform.identity.translatedBy(x: label.bounds.width,y: 0) }) { (finished) in UIView.animateKeyframes(withDuration: 0.3,delay: 0.25,options: [],animations: { cell.transform = CGAffineTransform.identity label.transform = CGAffineTransform.identity },completion: { (finished) in label.removeFromSuperview() }) } } func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) { previewActions(forCellAt: indexPath) return }