使UITableViewCell操作重叠内容

时间:2016-04-12 05:08:57

标签: ios swift uitableview

我试图让UITableViewCell的操作与单元格的内容重叠,就像在国家地理应用程序中一样:

table view
table view when swiped

我尝试在单元格的contentView上使用一个监听器来跟踪框架并保持不变,但我无法让它工作(虽然它可能会,但我有点新到iOS)。

如果有人有任何关于创造类似效果的建议,我们将非常感激!

1 个答案:

答案 0 :(得分:0)

你可以创建自己的自定义单元格并添加删除按钮和滑动手势,使按钮重叠单元格的内容,例如,自己尝试,首先使用单个视图应用创建示例项目,然后继续

使用选中的xib选项对tabview单元格进行子类化,并将其命名为CustomCell,并在CustomCell.swift类中过去以下代码

import UIKit

class CustomCell: UITableViewCell {

var deleteButton:UIButton!

//create a custom cell if not in the reuse pool
class  func  customCell() -> CustomCell?
{
        let aVar:Array = NSBundle.mainBundle().loadNibNamed("CustomCell", owner: nil, options: nil)

        if aVar.last!.isKindOfClass(UITableViewCell)
        {
            return aVar.last as? CustomCell
        }
        return nil
}

//handle your left swipe
func swipeLeft()
{
    print("swipe Left")
    self.contentView.bringSubviewToFront(deleteButton!)
    var frameRect:CGRect! = deleteButton!.frame
    frameRect.origin.x = self.contentView.bounds.size.width - self.deleteButton!.frame.size.width
    UIView.animateWithDuration(0.5) { () -> Void in
        self.deleteButton!.frame = frameRect
    }
}

//aslo the right swipe
func swipeRight()
{
    print("swipe right")
    var rect:CGRect! = deleteButton?.frame
    rect.origin.x = self.contentView.bounds.size.width
    UIView.animateWithDuration(0.5) { () -> Void in
        self.deleteButton!.frame = rect
    }
}

//hear we are adding the delete button in code, if u want add it in xib or (if u are using storyboard )
override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
    deleteButton = UIButton.init(type: .Custom)
    deleteButton.setTitle("Delete", forState: .Normal)
    deleteButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
    deleteButton.backgroundColor = UIColor.redColor()
    self.contentView.addSubview(deleteButton)


    let gestureLeft:UISwipeGestureRecognizer = UISwipeGestureRecognizer.init(target: self, action: "swipeLeft")
    gestureLeft.direction = .Left
    self .addGestureRecognizer(gestureLeft)

    let gestureRight:UISwipeGestureRecognizer = UISwipeGestureRecognizer.init(target: self, action: "swipeRight")
    gestureRight.direction = .Right
    self .addGestureRecognizer(gestureRight)

}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

//set the initial frame of delete button 
override func layoutSubviews() {
    super.layoutSubviews()
    var rect:CGRect! = deleteButton?.frame
    rect.size = CGSizeMake(100, 100)
    rect.origin.x = self.contentView.bounds.size.width
    deleteButton?.frame = rect
}
}

并确保tableview单元格高度为100pt,并在视图控制器中使用datasource和delegate在storyboard中设置tableview并实现所需的委托和数据源方法

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 10
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell:CustomCell? = tableView.dequeueReusableCellWithIdentifier("CELL") as? CustomCell
    if cell == nil
    {
        cell = CustomCell .customCell()
    }
    return cell as CustomCell!
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 100
}