gpt4 book ai didi

ios - 允许用户使用来自不同 View Controller 中标签的文本创建新的 tableViewCells?

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

因此,在 viewController1 中我有一个文本字段和一个“保存按钮”,当用户按下“保存按钮”时,文本将保存在下面的标签中(在同一个 View Controller 上)。

我不希望用户能够单击另一个按钮(开始吧!),这应该会引导他/她进入下一个 View Controller ,它是一个 UITableViewController。此按钮还应在 tableViewController 中创建一个新单元格 - 使用 viewController1 中标签中保存的文本。

我使用了“prepare(for segue:”-函数,它可以很好地将数据传递到下一个 viewController,但由于某些原因,我只能将它添加到 tableView-cells 之外的标签。如何将文本添加到 tableView 单元格内的标签?

如何让用户同时在 tableView 中创建一个新单元格?

在 viewController1 中:

@IBOutlet weak var DiaryNameLabel: UILabel!

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "PassingDiaryName" {
let vc = segue.destination as! DiariesTableView
vc.name = DiaryNameLabel.text!
}
}

在 viewController2(tableViewController)中:

class DiariesTableView: UITableViewController {

@IBOutlet weak var NameLabel: UILabel!

var name:String = ""

override func viewDidLoad() {
super.viewDidLoad()

NameLabel.text = name
}

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

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Diary1", for: indexPath)

cell.textLabel?.text = NameLabel.text
return cell
}

因此,正如我所说,当前代码可以很好地将文本从 viewController1 中的标签传递到下一个 viewController 中的 UILabel、NameLabel。但是一旦我在一个单元格中设置这个标签,我就会得到错误:

The NameLabel outlet from the DiariesTableView to the UILabel is invalid. Outlets cannot be connected to repeating content.

在此先致谢!

最佳答案

我认为此错误(“从 DiariesTableView 到 UILabel 的 NameLabel 导出无效。导出无法连接到重复内容。”)是因为您在动态 tableView 单元格中将 NameLabel 与 UILabel 连接起来。您需要子类化 UITableViewCell 并在那里绑定(bind)名称标签。像这样:

final class YourCell: UITableViewCell {
@IBOutlet var nameLabel: UILabel!
}

在 cellForRow 函数中:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Diary1", for: indexPath) as! YourCell
cell.nameLabel.text = NameLabel.text
return cell
}

或者如果您不需要动态表格 View ,您可以使用“静态单元格”: enter image description here

使用静态单元格,您可以在 ViewController 中创建 socket ,并且您不需要实现 UITableViewDataSource,只需添加到 XCode UI Builder 中。但是对于静态单元格,您不能在 tableView 中插入或删除单元格

在您的情况下,您需要在输入用户的某处存储字符串数组:

class TextStorage {
func save(text: String) {
// save somewhere example NSUserDefaults or CoreData
}

func obtainText() -> [String] {
// obtain saved text
}
}

带有文本框的 viewContoller 会是这样的。文本:

class ViewController: UIViewController {
@IBOutlet var textField: UITextField!

private let textSorage = TextStorage()

@IBAction func done() {
textStorage.save(text: textField.text ?? "")
// then go to viewController with tableView
}
}

带有 TableView 的 ViewController 只是从存储中获取保存的文本并将其显示在 tableView 中:

class TableViewController: UIViewController {
@IBOutlet var tableView: UITableView!

private let textSorage = TextStorage()
private var savedText: [String]?

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
updateTableView()
}

func updateTableView() {
savedText = textSorage.obtainText()
tableView.reloadData()
}
}

extension TableViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Diary1", for: indexPath) as! YourCell
cell.nameLabel.text = NameLabel.text
return cell
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return savedText?.count ?? 0
}
}

关于ios - 允许用户使用来自不同 View Controller 中标签的文本创建新的 tableViewCells?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52647416/

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