我试图从TextView中获取一个字符串,并为TextView.text中的每个字符添加新行。
例如,如果TextView text =“ hi there”,我希望表格视图看起来像这样:
h
i
(空格)
t
h
e
r
e
谢谢!
答案 0 :(得分:5)
当用户输入新文本时,将您的字符串转换为字符数组:
let chars = Array(string)
将角色数组用作表视图的数据源。更改字符数组后,在表格视图上调用reloadData()
。
您的数据源方法可能如下所示:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return chars.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = String(chars[indexPath.row])
return cell
}
下面是UITableViewController的完全实现的子类。
要使用它:
将该类作为Swift文件添加到您的项目中。
将UITableViewController场景添加到情节提要
选择“身份检查器”并将类更改为
CharacterTableViewController
将容器视图拖动到您想要的视图控制器上 包含您的表格视图。 (我将其称为“父”视图 控制器)
按住Control键从容器视图拖动到您的
CharacterTableViewController
。在出现的弹出菜单中,选择
“嵌入”以创建嵌入序列。
向您的父母添加prepare(for:sender:)
(prepareForSegue)方法
试图将segue.destination强制转换为类型的视图控制器
使用CharacterTableViewController
if let
,如果成功,则将CharacterTableViewController
保存到实例变量。 (我们称之为characterVC
。)
将文本视图添加到父视图控制器。将控件拖到您的父视图控制器中,以向文本视图添加IBOutlet
。致电出口theTextView
。
将按钮添加到父视图控制器。按住Control键从按钮中拖动到父视图控制器中,以创建IBAction。在按钮操作中,从theTextView
获取文本并将其传递到characterVC
(characterVC.contentString = theTextView.text
)
import UIKit
class CharacterTableViewController: UITableViewController {
public var contentString: String? {
didSet {
if let string = contentString {
characters = Array(string)
} else {
characters = nil
}
}
}
var characters: [Character]? {
didSet {
tableView.reloadData()
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return characters?.count ?? 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = String(characters?[indexPath.row] ?? Character(""))
return cell
}
}
我创建了一个在演示项目中使用上面的表视图类的项目。您可以通过以下链接下载它:https://github.com/DuncanMC/CharacterTableView.git
答案 1 :(得分:1)
这个更直接。希望你喜欢。
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return textView.text.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let myText = textView.text
cell.textLabel?.text = "\(myText[myText.index(myText.startIndex, offsetBy: indexPath.row)])"
return cell
}
有一个错字。我将其修复并向您显示结果。