静态UITableView单元内的动态UITableView数据源

时间:2016-06-13 21:03:34

标签: ios swift uitableview

这可能是更好的方法,但我一整天都在谷歌搜索,无法找到解决我特定问题的方法:

我有一个静态TableView,它显示了大量的信息,并包含一个文本输入部分,用于将值添加到嵌套在父静态TableView的一个单元格中的动态TableView。

为此,我在UITableViewController中有一个UITableViewDataSource和UITableViewDelegate的子类,它将控制嵌套TableView中显示的内容。我有一个嵌套表的出口:

@IBOutlet weak var validatedCardsTable: UITableView!

在我的viewDidLoad中:

let dataSource = ValidatedCardsDataSource(tableView: self.validatedCardsTable)
self.validatedCardsTable.dataSource = dataSource
self.validatedCardsTable.delegate = dataSource

我的子类看起来像这样:

class ValidatedCardsDataSource :NSObject, UITableViewDataSource, UITableViewDelegate {

    var tableView:UITableView

    init(tableView : UITableView) {
        self.tableView = tableView
        super.init()
    }

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 100
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return 1
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = self.tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as UITableViewCell
        cell.textLabel!.text = "Title of Row: #\(indexPath.row)"
        return cell
    }
}

当我运行此代码时,嵌套的TableView会加载相应的"行标题"我在cellForRowAtIndexPath中设置的文字(虽然表格视图不会调整大小,但我确定这是另一个问题)。但是,当我在任何地方按下TableView时,我指定了一个标签" A Label"在我的故事板中的单元格原型中也显示在单元格上,然后当我释放按下时,所有格式化都会消失,单元格将恢复为默认状态。我假设我没有在某个地方完全挂钩,但是你可以提供任何帮助来追踪我做错了什么,或者建议一个更好的办法来处理这个问题,我将不胜感激!屏幕截图如下:

原型细胞:

Prototype Cell

加载显示的内容:

loaded

触地显示的内容:

loaded

触摸显示的内容:

loaded

2 个答案:

答案 0 :(得分:1)

覆盖你的单元格方法“touchesBegan:withEvent:/ touchesEnded:withEvent:/ touchesCancelled:withEvent:” 当单元格被触及/向上/向上/向上时,改变UI样式。

答案 1 :(得分:0)

经过一些更多的实验,我能够弄明白!回顾它似乎很明显,但是当我实例化我的数据源时,我正在做一些奇怪的循环引用荒谬。我删除了init函数,以及我在dataSource子类中使用的tableView参数的引用。这就是我的dataSource类现在的样子:

let dataSource = ValidatedCardsDataSource()
self.validatedCardsTable.dataSource = dataSource
self.validatedCardsTable.delegate = dataSource
class ValidatedCardsDataSource :NSObject, UITableViewDataSource, UITableViewDelegate {

    var selectedRow = 0
    let rowCount = 10

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 100.0
    }

    func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 100.0
    }


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return 1
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as UITableViewCell
        cell.textLabel!.text = "Title of Row: #\(indexPath.row)"
        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print(indexPath.row)
        self.selectedRow = indexPath.row
        tableView.reloadData()
    }
}

现在我只需要弄清楚我的约束......感谢您的回复!