我对使用Swift的UIKit相对较新。目前,我正在尝试制作一个简单的UITableView,其中包含每个单元格的几个UILabels(纯粹以编程方式),尽管我在尝试这样做时遇到了很多麻烦。我的代码如下:
import UIKit
class SettingsVC: UIViewController {
var settingsTableView = UITableView(frame: .zero, style: .insetGrouped)
override func viewDidLoad() {
super.viewDidLoad()
createTableView()
}
func createTableView() {
view.addSubview(settingsTableView)
setTableViewDelegates()
settingsTableView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
settingsTableView.topAnchor.constraint(equalTo: view.topAnchor),
settingsTableView.leftAnchor.constraint(equalTo: view.leftAnchor),
settingsTableView.rightAnchor.constraint(equalTo: view.rightAnchor),
settingsTableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
])
}
func setTableViewDelegates() {
settingsTableView.delegate = self
settingsTableView.dataSource = self
}
}
extension SettingsVC: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
这是当前在模拟器中显示的内容。
这是我想看到的。
我如何着手改变我先前存在的代码以得到我所寻求的最终结果?我有一种感觉,这与我的代理或数据源有关,但无论我做什么,我似乎总是迷路。任何帮助都将不胜感激。
您需要先制作一个自定义的单元格类
class CustomTableViewCell: UITableViewCell
确保为您的自定义单元格提供reuse标识符。例如,
class CustomTableViewCell: UITableViewCell {
static let reuseIdentifier: "CustomTableViewCell"
}
在该单元类中,配置所需的标签,就像在Setting sVC
中使用setting sTableView
所做的那样
并在SettingsVC中的
cellForRowAt
函数中返回您的CustomTableViewCell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: CustomTableViewCell.reuseIdentifier) as? CustomTableViewCell else {
print("Cannot find CustomTableViewCell")
return UITableViewCell()
}
return cell
}
关于缺少数据源,您是正确的。您必须声明您的数据源。我已经重构了您的一些代码,如下所示
import UIKit
class SettingsVC: UIViewController {
lazy var settingsTableView: UITableView = {
let tableView = UITableView(frame: .zero, style: .insetGrouped)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellIdentifier)
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.delegate = self
tableView.dataSource = self
return tableView
}()
//cell identifier
let cellIdentifier = "CellName"
//declare a datasource with your data
let myDataSource = ["Hello", "There", "My", "Friend"]
override func viewDidLoad() {
super.viewDidLoad()
setupView()
}
func setupView() {
view.addSubview(settingsTableView)
NSLayoutConstraint.activate([
settingsTableView.topAnchor.constraint(equalTo: view.topAnchor),
settingsTableView.leftAnchor.constraint(equalTo: view.leftAnchor),
settingsTableView.rightAnchor.constraint(equalTo: view.rightAnchor),
settingsTableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
])
}
}
extension SettingsVC: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myDataSource.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// This is how UITableView works:
// when the table becomes very long (let's say millions of cells)
// then the table will first allocate 4-5 cells to fill the iPhone's screen
// depend on the device's screen size, the number of cells will be different.
// as long as users scroll the table view down, the table view will re-use existing cells and update the values accordingly, there is no new memory allocated
// So the cell can be re-usable therefore you should call this func below to reduce memory warning issue
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)
guard let myCell = cell else {
return UITableViewCell()
}
let myText = myDataSource[indexPath.row]
myCell.textLabel?.text = myText
return myCell
}
}
我正在使用SpringDoc,并试图以编程方式向OpenApi添加一个模式,但没有成功。 mySchema的描述没有添加到我在生成的YAML文件中看到的模式列表中,如果我试图引用它:
我正在尝试在Android上添加Wifi网络,我想知道如何连接到不广播其SSID的Wifi网络(它是否有空SSID或带有\0s的清晰SSID)。 这是我目前用于广播其SSID的Wifi网络的内容:
问题内容: 我有一个奇怪的问题。我试图以编程方式将dataSource分配给表。 我已使用界面生成器在ViewController中为其创建了一个和IBOutlet。我创建了一个实现的类。我将表的设置为dataSource的实例。一切都会编译并正常运行,直到设置dataSource的行在运行时执行。 错误是并且定义线突出显示。 有什么想法为什么我得到这个运行时错误?我正在Swift中使用XCode
问题内容: 我需要以编程方式向JSF页面添加JS和CSS资源。目前尚不清楚如何实现这一目标。有人可以提供提示或启动示例吗? 问题答案: 这取决于您到底想在哪里声明资源。 通常 ,以编程方式声明它们的唯一原因是您拥有一个自定义或生成HTML代码,而这些代码又需要这些JS和/或CSS资源。然后由或声明它们。 但是,如果您 确实 需要在其他地方声明它们,例如 在 渲染响应 之前 调用的backing b
如何以编程方式在Spring Boot中将内容添加到endpoint?文档指出,通过使用接口,这对于endpoint是可能的。endpoint也有什么吗? 我想在那里添加操作系统名称和版本以及其他运行时信息。
我还在想办法弄清楚回收站。我有一个arraylist,用于初始化回收器视图。 如何在设置适配器和布局管理器后向回收器视图添加新项目? 所以基本上,在我和之后,我如何向RecyclerView添加一个新项目呢??