解析:按行检索数据

时间:2015-12-27 00:08:24

标签: swift uitableview parse-platform

概述:如何在具有segue的单元格中进行此操作  标识符0将加载具有0作为其ID的行中的数据,具有segue标识符1的单元将加载具有1作为其ID的行中的数据,依此类推。数据包括ID(响应单元格标识符),navTitle(导航栏标题),书写(文章由谁撰写),日期(文章日期)和文章(文章本身)。

enter image description here

我正在尝试这样做,以便在我的tableview中点击一个单元格后,它会打开该单元格唯一的数据。最好的方法是什么?我想也许我应该检查一下我在Parse上的ID列并加载该行中的数据,但我不知道该怎么做。有一个更好的方法吗?任何帮助表示赞赏!请随时向我询问任何其他信息。

enter image description here

^所以这里有一个tableview,其中数据来自Parse并用于两个标签。

enter image description here

^此视图控制器使用以下命令连接到上面的单元格:

#/etc/odbc.ini 

[ODBC Data Sources]
VOS = Virtuoso

[VOS]
Driver = virtuoso-odbc
Description = Virtuoso Open-Source Edition
Address = localhost:1111

#/etc/odbcinst.ini 

[virtuoso-odbc]
Driver      = /usr/lib/virtodbc.so

这是我的 EventsDetailViewController ,是点击一个单元格时调用的那个:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    if indexPath.row == 0 {
        self.performSegueWithIdentifier("0a", sender: nil)
        self.tableview.deselectRowAtIndexPath(indexPath, animated: true)

    }
}

这是我的 EventsViewController

import UIKit
import Parse
import ParseUI
import Bolts

class EventDetailViewController: UIViewController {

@IBAction func eventDetail(sender: AnyObject) {
    dismissViewControllerAnimated(true, completion: nil)

}

@IBOutlet weak var articleTitle: UILabel!
@IBOutlet weak var writtenBy: UILabel!
@IBOutlet weak var date: UILabel!
@IBOutlet weak var article: UITextView!
@IBOutlet weak var navBar: UINavigationBar!

var dateDetail = [String]()
var articleDetail = [String]()

override func viewDidLoad() {
    super.viewDidLoad()

    loadEvents()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func loadEvents () -> Void {

    var query = PFQuery(className: "eventsdetail")
    query.findObjectsInBackgroundWithBlock {
        (objects: [PFObject]?, error : NSError?) -> Void in

        if error == nil {

            if let objects = objects as [PFObject]! {
                for object in objects {

                    var output1 = object.objectForKey("navTitle") as! String
                    self.navBar.topItem?.title = output1

                    var output2 = object.objectForKey("articleTitle") as! String
                    self.articleTitle.text = output2

                    var output3 = object.objectForKey("written") as! String
                    self.writtenBy.text = output3

                    var output4 = object.objectForKey("date") as! String
                    self.date.text = output4

                    var output5 = object.objectForKey("article") as! String
                    self.article.text = output5

                }
            }

        }

    }
}

}

2 个答案:

答案 0 :(得分:1)

由于您拥有tableView上的数据,因此请确保在连接原型单元格和目标视图控制器的storyboard中创建segue,并为segue添加标识符。

接下来,在带有tableView的控制器上,请确保调用:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if (segue.identifier == "segueIdentifier"){

        let detailScene = segue.destinationViewController as! EventDetailViewController

        if let indexPath = self.tableView.indexPathForSelectedRow {
            let row = Int(indexPath.row)

            //here you can pass all the data to the destination viewController. But you CANT POPULATE YOUR LABELS. make sure you pass the data to some auxiliar variable(s). Next line is an example
            detailScene.selectedData = (self.myData[row] as! PFObject)
        }
    }
}

更新

detailScene.selectedData = (self.myData[row] as! PFObject)

detailScene是目标viewController的一个实例。在这种情况下,selectedData是PFObject的一个实例,用于填充目标viewController中的标签。 self.myData是源viewController中的数组,其数据显示在tableView中。

因此,如果您要发送您在单元格中显示的数据。 (

self.testArray[indexPath.row]
self.subArray[indexPath.row]

)确保声明将在EventsDetailViewController上收到此数据的变量:

var testString:String!
var subString:String!

然后在prepareForSegue(EventsViewController)中确保使用适当的数据实例化这些变量:

detailScene.test = self.testArray[row]
detailScene.sub = self.subArray[row]

最后在EventsDetailViewController上,您可以将数据传递到viewDidLoad()上所需的标签:

self.articleTitle.text = testString

如有任何疑虑,请与我联系。

答案 1 :(得分:0)

您要问的是典型的基本应用:在桌面视图中显示项目列表,并能够点击一行以查看更多详细信息。

对我来说,不寻常的是你有两个不同的类:events和eventdetails。

将它与书籍数据库进行比较。你不会有Book类和BookDetails类。您只有一个Book类,其中包含有关书籍的所有详细信息。因此,当您想要显示书籍列表时,您将获取所有书籍对象。在tableviewcontroller中,您可以显示Book对象的字段子集(例如title和author)。当用户然后点击特定书籍时,您打开一个viewcontroller并将该行的Book对象传递给它。然后,此详细视图控制器只显示来自同一个Book对象的更多信息/字段。