在swift中获取单独方法中集合视图单元的索引路径

时间:2015-09-22 19:58:16

标签: swift parse-platform uicollectionviewcell

我的集合视图单元格中有一个按钮,用于将索引路径中的项目保存到解析用户类中的数组属性。集合视图由事件填充,用户单击弹出警报视图的按钮,当他们单击是时,事件将保存到用户将参加的事件数组中。

在cellForRowAtIndexPath方法中,我将一个目标添加到按钮并调用pop alert视图方法,这个方法一切都很好......

cell.attendButton.addTarget(self, action: "popAlertView", forControlEvents: UIControlEvents.TouchUpInside)

现在,方法内部遇到了一些问题......

方法的第二行(让事件......)出现错误,表示"任何对象都没有名为row"的成员。访问索引路径并为相应路径实例化事件的最佳方法是什么?

func popAlertView() {

    var indexPath = self.collectionView.indexPathsForSelectedItems()
    let event = events[indexPath?.row]

    var alertViewController = UIAlertController(title: "Attend event?", message: nil, preferredStyle: UIAlertControllerStyle.Alert)

    alertViewController.addAction(UIAlertAction(title: "Yes!", style: UIAlertActionStyle.Default, handler: { (action) -> Void in



        // save event to array of events of user
    }))

    alertViewController.addAction(UIAlertAction(title: "No thanks", style: UIAlertActionStyle.Cancel, handler: { (action) -> Void in


    }))

    self.presentViewController(alertViewController, animated: true) { () -> Void in

        // finish up here
    }
}

此外,在事件数组的保存事件(用户类)中,我究竟能如何处理,同时以数组形式保存和检索PFUser.currentUser的对象?我查看了Parse的开发人员指南,但找不到具体的帮助,只保存单个对象。

我非常擅长快速解析,感谢您的耐心和帮助!

2 个答案:

答案 0 :(得分:0)

indexPathsForSelectedItems()返回[NSIndexPath]?,表示Optional ArrayNSIndexPathNSIndexPath个对象。

为了获得实际的Optional个对象,您需要首先打开Array,然后遍历guard。在这种情况下,让我们使用NSIndexPath,因为我们无法继续,除非至少有一个guard let selectedItemPaths = self.collectionView.indexPathsForSelectedItems() else { return } var selectedEvents = [Event]() for indexPath in selectedItemPaths { selectedEvents.append(events[indexPath.row]) }

Array

此时,根据Event的所有内容,您的selectedItemsEvent个对象都会setTimeout。假设您每次添加一个路径时都清除所选路径,那么每次调用此代码时,您只需添加一个pressCool

答案 1 :(得分:0)

不要添加目标,像这样使用@IBAction

@IBAction func popAlertView(sender: AnyObject) {
    let buttonPosition = sender.convertPoint(CGPointZero, toView: self.tableView)
    let indexPath = self.tableView.indexPathForRowAtPoint(buttonPosition)
    if indexPath != nil {
        let cell:SweetTableViewCell!(change this) = tableView!.cellForRowAtIndexPath(indexPath!) as! SweetTableViewCell!(change this too)