Хотите узнать, как лучше всего добавить субтитры в Tableview для списка текстовых файлов? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть список переставляемых текстовых файлов, и их заголовки перечислены в табличном представлении, и я пытаюсь найти наилучший способ добавления субтитров. Я хотел бы, чтобы названия были названиями текстов на их иностранном языке, а субтитры были бы переведенными именами.

В настоящее время я перечислил названия, подобные этому:

stories = Bundle.main.urls(forResourcesWithExtension: "txt", subdirectory: nil)!

А потом я добавляю имя файла и расширение полосы так:

cell.textLabel?.text = stories[indexPath.row].deletingPathExtension().lastPathComponent

Один из способов сделать это - поместить все строки txt-файлов в строковый массив, а затем поместить субтитры в txt-файлы в строке 1, а затем добавить их в виде субтитров в виде таблицы. Но я пока не знаю, как это сделать, не читая целые файлы текста и затем читая строку 1. Есть ли способ прочитать только первую строку всех текстовых плиток и поместить их в массив субтитров, который соответствует названия?

Второй способ, который я подумал - возможно, добавить оригинальный язык и заголовки перевода в имена файлов для текстовых файлов, разделенных символом «-». Есть ли способ прочитать текст перед дефисом как одну строку, а текст после - как вторую строку?

Есть ли еще лучший способ сделать это?

Добавлено: истории открываются этим методом.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let vc = storyboard?.instantiateViewController(withIdentifier: "Detail") as? DetailViewController {
            vc.selectedStory = stories[indexPath.row]
            navigationController?.pushViewController(vc, animated: true)
        }
    }

Обновление: по какой-то причине я решил создать словарь так:

var storyTitles:[String:String] = [
   "foreign lang title A":"english translation A",
   "foreign lang title B":"english translation B",
]

и добавил все мои названия на иностранных языках: переведенные названия.

Затем я подключил его к cell.detailText вот так и все заработало!

 let storyForeignTitle = stories[indexPath.row].deletingPathExtension().lastPathComponent
        cell.textLabel?.text = storyForeignTitle
        let storyEnglishTitle = storyTitles[storyForeignTitle]
        cell.detailTextLabel?.text = storyEnglishTitle

Итак, последний вопрос: у меня будет около 50 историй. Есть ли недостатки у решения, которое я придумал? Я беспокоился, что это не сработает, потому что иностранный язык - это не латинский текст, но в моем симуляторе все в порядке.

1 Ответ

0 голосов
/ 02 мая 2018

Используя ваш метод использования Один текстовый файл для каждой истории , вы можете сохранить заголовок и перевод, разделенные запятой:

Title1,Translation1

Создание структуры истории:

struct Story {
    var title: String
    var translation: String
}

Инициализировать пустой Array из Story объектов

var stories = [Story]()

Прочитайте ваши текстовые файлы:

if let textfileURLs = Bundle.main.urls(forResourcesWithExtension: "txt", subdirectory: nil) {

    for url in textfileURLs {

        do {
            let textFile = try String(contentsOf: url, encoding: .utf8)
            let data = textFile.components(separatedBy: ",")
            if data.count == 2 {
                let title = data[0], translation = data[1]
                stories.append(Story(title: title, translation: translation))
            }
        } catch {
            print("Error reading text file")
        }
    }
}

В numberOfRowsInSection:

return stories.count

Затем в cellForRowAt indexPath вы можете получить заголовок и субтитры для каждого сюжетного объекта:

    cell.textLabel?.text = stories[indexPath.row].title
    cell.detailTextLabel?.text = stories[indexPath.row].translation

Альтернативный метод с использованием одного текстового файла

В зависимости от вашего варианта использования, вероятно, было бы более эффективно просто хранить все истории в одном текстовом файле, например:

Title1,Translation1
Title2,Translation2
Title3,Translation3

Затем вы можете проанализировать данные следующим образом:

    if let textFileURL = Bundle.main.url(forResource: "StoryTitles", withExtension: "txt") {

        do {
            let textFile = try String(contentsOf: textFileURL, encoding: .utf8)
            let data = textFile.components(separatedBy: "\n")

            for row in data {
                let storyData = row.components(separatedBy: ",")
                if storyData.count == 2 {
                    let title = storyData[0], translation = storyData[1]
                    stories.append(Story(title: title, translation: translation))
                }
            }
        } catch {
            print("Error reading text file")
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...