Я практикуюсь, создавая простое приложение с 20 TXT-файлами, которые я добавил в приложение.Вот что у меня получилось:
- Создан tableviewcontroller со встроенной навигацией и подробным представлением
- Список заголовков файлов .txt с файловым менеджером в tableview
Я застрял при попытке загрузить файлы .txt в текстовое представление, когда выбрана плитка .txt.Я попытался использовать func load, но затем застрял на том, как вызвать load, когда выбран заголовок .txt.Может кто-нибудь помочь или связать меня с чем-то, что объясняет это?
В идеале я хотел бы добавить файлы .txt таким образом, чтобы обеспечить большую гибкость, чем просто добавление текстовых тел.Это стихи на иностранном языке, и я хотел бы добавлять переводы после каждой строки, которая может включаться и выключаться.Кто-нибудь знает, как я мог это сделать, и если направление, которое я выбрал до сих пор, является лучшим способом добраться туда?Должен ли я вызывать файлы другим способом?
Вот мой контроллер вида:
import UIKit
class ViewController: UITableViewController {
var hymns = [String]()
override func viewDidLoad() {
super.viewDidLoad()
let fm = FileManager.default
let path = Bundle.main.resourcePath!
let items = try! fm.contentsOfDirectory(atPath: path)
for item in items {
if item.hasSuffix(".txt") {
hymns.append(item)
}
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return hymns.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Hymn", for: indexPath)
cell.textLabel?.text = hymns[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let vc = storyboard?.instantiateViewController(withIdentifier: "Detail") as? DetailViewController {
vc.selectedHymns = hymns[indexPath.row]
navigationController?.pushViewController(vc, animated: true)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
And this is my detailViewController so far:
import UIKit
class DetailViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
var selectedHymns: String?
var hymnText = [String] ()
override func viewDidLoad() {
super.viewDidLoad()
if let textToLoad = selectedHymn {
if let hymnText = load(file: textToLoad){
textView.text = hymnText
}
}
}
func load(file name:String) -> String {
if let path = Bundle.main.path(forResource: name, ofType: "txt") {
if let contents = try? String(contentsOfFile: path) {
return contents
} else {
print("Error! - This file doesn't contain any text.")
}
} else {
print("Error! - This file doesn't exist.")
}
return ""
}
}