以编程方式添加的UITableView不会填充数据

时间:2015-06-10 15:48:51

标签: ios swift uitableview

我希望创建UITableView自定义单元格,并将其添加到我的UIViewController

如果我将故事板中的UITableView布局到我的UIViewController一切都可以使用自定义单元

但我意识到关于它的高度的动画不是很平滑 - 有时桌面视图会消失

因此,每次我想做一些动画时,我决定创建/销毁UITableView,并将其作为子视图添加到我的UIViewController

但以编程方式添加的UITableView不会填充数据。

我在这里做错了什么?

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var dataArr = [String]() // Holds data for UITableView
var tv: UITableView!     // Notice it's not @Outlet

override func viewDidLoad() {
    super.viewDidLoad()


    dataArr = ["one", "two", "three"]


    // Create and add UITableView as drop down
    tv = UITableView()
    tv.delegate = self
    tv.dataSource = self

    createTableView()
}

func createTableView() {
    let w = UIScreen.mainScreen().bounds.size.width
    tv.frame = CGRectMake(0, 50, w, 0)
    tv.rowHeight = 25.0

    // Register custom cell
    var nib = UINib(nibName: "searchCell", bundle: nil)
    tv.registerNib(nib, forCellReuseIdentifier: "searchCell")

    self.view.addSubview(tv)

    UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.BeginFromCurrentState, animations: {
            self.tv.frame.size.height = 100
        }, completion: { (didFinish) in
            self.tv.reloadData()
        })
}

func destroyTableView() {
    UIView.animateWithDuration(0.2, animations:
        {
            // Hide
            self.tv.frame.size.height = 0
        }, completion: { (didFinish) in
            self.tv.removeFromSuperview()
    })
}

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

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: SearchCell = self.tv.dequeueReusableCellWithIdentifier("searchCell") as! SearchCell
    cell.cellLabel.text = dataArr[indexPath.row]
    return cell;
}
}

1 个答案:

答案 0 :(得分:0)

我认为问题在于这一行。

self.tv.frame.size.height = 100

尝试设置整个框架而不仅仅是高度。很确定UIView的Frame属性是只读的。

请参阅here

如果这不起作用。也许尝试实施

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