如何为字符串中的每个字符向TableView添加新单元格?

时间:2018-09-23 22:22:01

标签: ios swift uitableview uitextview

我试图从TextView中获取一个字符串,并为TextView.text中的每个字符添加新行。

例如,如果TextView text =“ hi there”,我希望表格视图看起来像这样:

h

i

(空格)

t

h

e

r

e


谢谢!

2 个答案:

答案 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的完全实现的子类。

要使用它:

  1. 将该类作为Swift文件添加到您的项目中。

  2. 将UITableViewController场景添加到情节提要

  3. 选择“身份检查器”并将类更改为 CharacterTableViewController

  4. 将容器视图拖动到您想要的视图控制器上 包含您的表格视图。 (我将其称为“父”视图 控制器)

  5. 按住Control键从容器视图拖动到您的 CharacterTableViewController。在出现的弹出菜单中,选择 “嵌入”以创建嵌入序列。

  6. 向您的父母添加prepare(for:sender:)(prepareForSegue)方法 试图将segue.destination强制转换为类型的视图控制器 使用CharacterTableViewController if let,如果成功,则将CharacterTableViewController保存到实例变量。 (我们称之为characterVC。)

  7. 将文本视图添加到父视图控制器。将控件拖到您的父视图控制器中,以向文本视图添加IBOutlet。致电出口theTextView

  8. 将按钮添加到父视图控制器。按住Control键从按钮中拖动到父视图控制器中,以创建IBAction。在按钮操作中,从theTextView获取文本并将其传递到characterVCcharacterVC.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
    }
}

编辑#2:

我创建了一个在演示项目中使用上面的表视图类的项目。您可以通过以下链接下载它: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
}

有一个错字。我将其修复并向您显示结果。

enter image description here