尝试在iOS表视图中实现MGSwipeTableCell

时间:2016-05-05 00:50:11

标签: swift uitableview uigesturerecognizer tableviewcell

我正在尝试在Swift 2,Xcode 7项目中实现可滑动的表视图。

我想使用这个库:

https://github.com/MortimerGoro/MGSwipeTableCell

我只想弄清楚将正确的方法应用到我的项目中。

我有一个带有TableView的UIView以及一个自定义的TableViewCell

以下是GitHub repo的实现代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let reuseIdentifier = "programmaticCell"
var cell = self.table.dequeueReusableCellWithIdentifier(reuseIdentifier) as! MGSwipeTableCell!
if cell == nil
{
  cell = MGSwipeTableCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: reuseIdentifier)
}

cell.textLabel!.text = "Title"
cell.detailTextLabel!.text = "Detail text"
cell.delegate = self //optional

//configure left buttons
cell.leftButtons = [MGSwipeButton(title: "", icon: UIImage(named:"check.png"), backgroundColor: UIColor.greenColor())
  ,MGSwipeButton(title: "", icon: UIImage(named:"fav.png"), backgroundColor: UIColor.blueColor())]
cell.leftSwipeSettings.transition = MGSwipeTransition.Rotate3D

//configure right buttons
cell.rightButtons = [MGSwipeButton(title: "Delete", backgroundColor: UIColor.redColor())
  ,MGSwipeButton(title: "More",backgroundColor: UIColor.lightGrayColor())]
cell.rightSwipeSettings.transition = MGSwipeTransition.Rotate3D

return cell
}

这是我当前项目中的cellForRowAtIndexPath函数:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let post = posts[indexPath.row]

    if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? PostCell {

        cell.request?.cancel()

        var img: UIImage?

        if let url = post.imageUrl {
            img = FeedVCViewController.imageCache.objectForKey(url) as? UIImage
        }

        cell.configureCell(post, img: img)

        return cell
    } else {
        return PostCell()
    }
}

我还需要实现这个回调:

MGSwipeButton(title: "Delete", backgroundColor: UIColor.redColor(), callback: {
  (sender: MGSwipeTableCell!) -> Bool in
  println("Convenience callback for swipe buttons!")
  return true
})

任何人都可以指导我如何做到这一点的正确方向?因为我不熟悉移动开发,所以我只是想让自己省去很多头疼。

我对实现代码中的“cell”声明和“if”语句以及如何将它与我创建的自定义单元格结合起来感到困惑。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell")与说

相同
if  tableView.dequeueReusableCellWithIdentifier("PostCell") != nil { 
    let cell = tableView.dequeueReusableCellWithIdentifier("PostCell")
   } 

他们通过声明变量设置等于可选项来做类似的事情。他们检查可选项是否为零。如果是这样,他们初始化一个新对象并设置等于该对象的单元格,以便他们可以安全地解包。

如果PostCell是MGSwipeTableCell的子类,您可以像添加它一样添加leftButtons和rightButtons。 e.g。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let post = posts[indexPath.row]

    if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? PostCell {
    cell.request?.cancel()

    var img: UIImage?

    if let url = post.imageUrl {
        img = FeedVCViewController.imageCache.objectForKey(url) as? UIImage
    }

    cell.configureCell(post, img: img)



     cell.rightButtons = [MGSwipeButton(title: "Delete", backgroundColor: UIColor.redColor(), callback: {
      (sender: MGSwipeTableCell!) -> Bool in
      print("Convenience callback for delete button!")
      return true
    })
        ,MGSwipeButton(title: "More",backgroundColor: UIColor.lightGrayColor(),callback: {
      (sender: MGSwipeTableCell!) -> Bool in
      print("Convenience callback for more button!")
      return true
    })]

    return cell
    } else {
        return PostCell()
    }
}