在静态表视图(单元格)中实现动态表

时间:2016-03-08 20:45:57

标签: ios swift tableview uitableview

所以基本上我到目前为止已经实现了一个静态表,并且在底部我想为事件的参与者列表添加另一个动态表。看看这里的截图:

Screenshot of my Xcode project

我现在的问题是,我无法为最后一个静态表视图单元格中放置的动态表设置自己的类。您可以在屏幕截图中查看红色标记的方块。我的实际计划是给动态一个自己的类,然后将参与者列表作为数组检索,并根据数组的计数等设置numberOfRowsInSection。

你们是否知道我如何在静态表中实现它?所以我基本上如何在底部添加动态表,包括后来的无限滚动?

到目前为止,我已尝试过这篇文章,但它并没有完全帮助我:Dynamic UITableView inside static cell 我将在下面添加我的解决方案。

你的帮助会非常感激!

亲切的问候 马特

3 个答案:

答案 0 :(得分:2)

除非有一个真正的理由让顶部成为一个表,所以最简单的解决方案是使顶部成为表头视图并使用动态表。

答案 1 :(得分:1)

创建一个ViewController。然后将两个ContainerViewControllers放在ViewController中。使用embed为2个单独的tableViewcontrollers创建segues。一个是静态tableview,另一个是动态tableview。这样,您可以在顶部放置一个静态表,在下面放置一个动态表。

答案 2 :(得分:0)

好的,谢谢rMickeyD的提示。我部分地使用它并实现它。你可以在这里看到这个截图的结果:

Storyboard

除此之外,我在静态表格中设置了单元格的高度,并将prepareToSegue设置为来自右侧单元格高度的guests.count * 44数组。

静态表视图的代码(左):

import UIKit
class EventDetailTableViewController: UITableViewController {

    var attendeesArrayFromDatabase = ["Kathi", "Cansin", "Tyrone", "Manuel", "Stavros", "Christoph", "Maria", "Aditya", "Kathi", "Cansin", "Tyrone", "Manuel", "Stavros", "Christoph", "Maria", "Aditya"]

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

        if indexPath.section == 1 && indexPath.row == 0 {
            let height:CGFloat = CGFloat(attendeesArrayFromDatabase.count * 44)
            return height
        }
        return super.tableView(tableView, heightForRowAtIndexPath: indexPath)
    }

    // MARK: Navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let destViewController : EventPeopleJoinedContainerTableViewController = segue.destinationViewController as! EventPeopleJoinedContainerTableViewController

        destViewController.attendeesArray = attendeesArrayFromDatabase
    }
}

和动态表的右表视图:

import UIKit
class EventPeopleJoinedContainerTableViewController: UITableViewController {

    var attendeesArray = []

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    // MARK: - Table view data source
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return attendeesArray.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("personJoined", forIndexPath: indexPath) as UITableViewCell

        //Create a label with the name of a person from array attendeesArray
        let attendeeNameLabel = UILabel(frame: CGRect(x: 70, y: 0, width: cell.frame.width, height: cell.frame.height))
        attendeeNameLabel.font = cell.textLabel?.font.fontWithSize(14.0)
        attendeeNameLabel.textColor = UIColor.darkGrayColor()
        attendeeNameLabel.text = attendeesArray[indexPath.row] as? String

        //Create a image view for the profile picture of the guest
        let attendeeImageView = UIImageView(frame: CGRect(x: 25, y: 7, width: 30, height: 30))
        attendeeImageView.layer.cornerRadius = attendeeImageView.frame.size.width/2
        attendeeImageView.layer.borderColor = UIColor.whiteColor().CGColor
        attendeeImageView.layer.borderWidth = 0.5
        attendeeImageView.clipsToBounds = true
        attendeeImageView.image = UIImage(named: "profilPicDummy")

        cell.contentView.addSubview(attendeeNameLabel)
        cell.contentView.addSubview(attendeeImageView)

        return cell
    }
}