iosswiftparse-platformtableviewpfquerytableviewcontrolle

How to set the topmost cell (first row) of detail view's table view with master view's selected cell content?


Working on a social iPhone app using Swift (with a Storyboard) and Parse where users can create posts and comment on posts similar to the Facebook iOS app and other social network apps.

The app has an initial, master Home Feed page (which displays user posts) and a detail Reply page (which displays user comments). Both use the PFTableViewController class and each of those table views have their own PFTableViewCell implemented in separate swift files as the prototype cells.

I am trying to send the content (username, post message, timestamp, etc) of a selected post cell from the master Home Feed page to the detail Reply page's topmost cell (the first cell at the top of the table view).

My goal is to have it work similar to the way the Facebook, Instagram, and Twitter iOS apps have it - whenever a user selects a post in the main feed/timeline, the detail view is shown where the main post is at the top (but not pinned to the top - meaning it will scroll up/down with the tableview) and its comments are in the cells beneath it.

I appreciate your help and time! Thank you!


Solution

  • After further research, one way to "hack" it is by doing something similar to the following:

    1) Create a custom tableview cell for the top row (topmost cell) by implementing it in a separate Swift file, just as you may have done for the prototype cell.

    2) Now you have two custom cells. So implement two function where in each you customize them the way that serves your apps requirements, etc and the cell.

    3) In the cellForRowAtIndexPath method, use an if/else statement to return the appropriate tableview cell for row 0 (topmost/header cell), otherwise return the other prototype cell for any other row (i.e.: the cells beneath the header cell):

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        if indexPath.row == 0 {
            return headerCellAtIndexPath()
        } else {
            return commentCellAtIndexPath(indexPath)
        }
    }
    
    func headerCellAtIndexPath() -> CommentsHeaderTableViewCell {
        let headerCell = tableView.dequeueReusableCellWithIdentifier("topCell") as! CommentsHeaderTableViewCell
    
        // Customize your headerCell...
    
        return headerCell 
    
    }
    
    func commentCellAtIndexPath(indexPath:NSIndexPath ) -> CommentTableViewCell {
        let commentCell = tableView.dequeueReusableCellWithIdentifier("commentCell", forIndexPath: indexPath) as! CommentTableViewCell
    
        // Customize your commentCell...
    
        return commentCell
    }