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

Bre*_*od. -1 uitableview uitextview ios swift

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

因此,如果TextView text ="hi there",我希望Table View看起来像这样:

H

一世

(空间)

Ť

H

Ë

[R

Ë


谢谢!

Dun*_*n C 5

当用户输入新文本时,将您的字符串转换为字符数组:

let chars = Array(string)
Run Code Online (Sandbox Code Playgroud)

使用caracters数组作为表视图的数据源.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
}
Run Code Online (Sandbox Code Playgroud)

编辑:

下面是UITableViewController的完全实现的子类.

要使用它:

  1. 将类作为Swift文件添加到项目中.

  2. 将UITableViewController场景添加到故事板

  3. 选择"Identity Inspector"并将类更改为 CharacterTableViewController

  4. 将容器视图拖到要包含表视图的视图控制器上.(我将其称为"父"视图控制器)

  5. 从容器视图控制拖动到您的 CharacterTableViewController.在弹出的菜单中,选择"embed"以创建嵌入segue.

  6. prepare(for:sender:)(prepareForSegue)方法添加到父视图控制器,尝试将segue.destination转换为CharacterTableViewController使用a 键入 if let,如果成功,则将其保存CharacterTableViewController到实例变量.(我们称之为characterVC.)

  7. 将文本视图添加到父视图控制器.控制拖动到父视图控制器以添加IBOutlet到文本视图.打电话给插座theTextView.

  8. 向父视图控制器添加一个按钮.按住Ctrl键并从按钮拖动到父视图控制器中以创建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
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑#2:

我创建了一个在演示项目中使用上面的表视图类的项目.您可以通过以下链接下载它:https://github.com/DuncanMC/CharacterTableView.git