Как добавить новую ячейку в TableView для каждого символа в строке? - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь взять строку из TextView и добавить новую строку для каждого символа в TextView.text.

, поэтому, если, например, TextView text = "hi there", мне нужна таблицаВид, чтобы выглядеть так:

ч

я

(пробел)

т

ч

е

r

e


спасибо!

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Это более прямо.Надеюсь, вам понравится.

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

0 голосов
/ 24 сентября 2018

Когда пользователь вводит новый текст, преобразуйте вашу строку в массив символов:

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. Выберите «Identity Inspector» и измените класс на CharacterTableViewController

  4. Перетащите представление контейнера на контроллер представления, который выхочу содержать ваш вид таблицы.(Я назову это «родительским» контроллером представления)

  5. Перетащите управление из представления контейнера в ваше CharacterTableViewController.В появившемся всплывающем меню выберите «embed», чтобы создать последовательность внедрения.

  6. Добавьте метод prepare(for:sender:) (prepareForSegue) в родительский контроллер представления, который пытается привести segue.в качестве пункта назначения введите CharacterTableViewController, используя if let и, если это удастся, сохраните CharacterTableViewController в переменной экземпляра.(Давайте назовем это characterVC.)

  7. Добавьте текстовое представление к вашему родительскому контроллеру представления.Перетащите элемент управления в родительский контроллер представления, чтобы добавить IBOutlet к текстовому представлению.Позвоните в розетку theTextView.

  8. Добавьте кнопку в родительский контроллер просмотра.Удерживая нажатой клавишу 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
    }
}

Edit # 2:

Я создал проект, который использует класс табличного представления выше в демонстрационном проекте.Вы можете скачать его по следующей ссылке: https://github.com/DuncanMC/CharacterTableView.git

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...