gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:18:50 25 4
gpt4 key购买 nike

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

如果我将 Storyboard 中的 UITableView 布局到我的 UIViewController 上,自定义单元格一切正常

但我意识到有关其高度的动画不是很平滑 - 有时表格 View 会消失

因此,我决定每次想做一些动画时都创建/销毁一个 UITableView,并将其作为 subview 添加到我的 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;
}
}

最佳答案

我认为问题出在这一行。

self.tv.frame.size.height = 100

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

参见here

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

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

关于ios - 以编程方式添加的 UITableView 不会填充数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30761252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com