Ich möchte Sie fragen, wie Sie eine Datenstruktur für mehrstufige Drill-Down-Tabellenansicht in Swift erstellen. Als ich weiß ich, wie es geht und Daten auf diese Weise TableView -> TableView -> DetailViewController mit NSObject für die Erstellung von Swift-Modellen übergeben. Aber seit einigen Wochen habe ich Mühe mit der Suche, wie man das macht: TableView -> TableView -> DetailViewController -> TableView wieder.Wie erstellt man eine Datenstruktur für mehrstufiges Drill-Down-TableView?
Da die App, die ich jetzt mache, ist Bildung bezogen, die erste TableView würde Abschnitte von Themen und leesons in ihnen enthalten, dann, wenn der Benutzer die Lektion wählt, führt die Überleitung und zeigt Inhalt als ViewController, dann drückt der Benutzer die Schaltfläche und er wird zu einem anderen TableView mit Aufgaben im Zusammenhang mit der Lektion in ihm umgeleitet. Also in allem sollte es so sein: LessonsTableView -> LessonDetailViewController -> TasksTableView -> TaskDetailViewController.
Ich kann sagen, dass das Hauptproblem darin besteht, die TableView von Aufgaben aus LessonDetailViewController aufgelistet zu bekommen. Da ich weiß, wie man 2 Datenebenen macht, kann ich 3 oder mehr nicht machen. Ich habe das ganze Internet durchsucht, ich habe Beispiele in Obj-C gefunden, aber einfach verstehe ich diese Programmiersprache nicht (versuchte, den Code in XCode zu konvertieren). Kann mir jemand sagen, wie ich das erreichen kann? Vielleicht gibt es eine Verbindung mit einem kurzen Tutorial, das ihr kennt.
aktualisieren
Ich habe es geschafft, die erste und Tableview Viewcontroller, aber mit Weitergabe von Daten von LessonViewController zu TasksTableView, immer diese Fehler stecken zu tun: Expression Typ ‚[Lektion]‘ ist ohne mehr Kontext nicht eindeutig. Vielleicht könnte jemand mir dabei helfen, mein Model:
import Foundation
struct Aufgabe { var name: String } struct Lektion { var name: String var info: String var Aufgaben: [Aufgabe] }
Klasse LessonList {
var name: String
var lessons = [Lesson]()
init(name: String, lessons: [Lesson]) {
self.name = name
self.lessons = lessons
}
class func lessonsSection() -> [LessonList] {
return [self.intro(), self.can()]
}
private class func intro() -> LessonList {
let tasks: [task] = [task(name: "hello"), task(name: "Hey")]
let tasks1: [task] = [task(name: "is He?"), task(name: "are they?")]
var lessons = [Lesson]()
lessons.append(Lesson(name: "I am", info: "This class is I am", tasks: tasks))
lessons.append(Lesson(name: "He is", info: "This class is He is", tasks: tasks1))
return LessonList(name: "Intro", lessons: lessons)
}
private class func can() -> LessonList{
let tasks: [task] = [task(name: "bye"), task(name: "can have")]
let tasks1: [task] = [task(name: "Can he?"), task(name: "They can't")]
var lessons = [Lesson]()
lessons.append(Lesson(name: "I can", info: "This class is I can", tasks: tasks))
lessons.append(Lesson(name: "He can't", info: "This class is He can't", tasks: tasks1))
return LessonList(name: "Can", lessons: lessons)
}
}
Die CourseTableView (erste) `Import UIKit
Klasse CourseTableVC: UITableViewController {
let lessonLists : [LessonList] = LessonList.lessonsSection()
override func viewDidLoad() {
super.viewDidLoad()
title = "Horizon English"
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return lessonLists.count
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return lessonLists[section].lessons.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "lessonCell", for: indexPath)
let lessonList = lessonLists[indexPath.section]
let lessons = lessonList.lessons
let lesson = lessons[indexPath.row]
cell.textLabel?.text = lesson.name
return cell
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let lessonList = lessonLists[section]
return lessonList.name
}
//MARK: - UITableViewdelegate, navigation segue
var selectedLesson: Lesson?
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let lessonLine = lessonLists[indexPath.section]
var lesson = lessonLine.lessons[indexPath.row]
selectedLesson = lesson
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "lessonDetailView" {
let lessonDetailVC = segue.destination as! LessonViewController
lessonDetailVC.lesson = selectedLesson
}
}
}`
LessonViewController , wo ich Fehler bekommen (in für segue vorbereiten) `Import UIKit
Klasse LessonViewController: UIViewController {
@IBOutlet weak var infoLabel: UILabel!
@IBAction func toTasksButton(_ sender: Any) {
}
var lesson: Lesson?
override func viewDidLoad() {
super.viewDidLoad()
title = lesson?.name
infoLabel.text = lesson?.info
}
// MARK: - navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showTasks" {
var taskTV = segue.destination as! TasksTableVC
taskTV.tasksList = lesson?.tasks as! [Lesson]
// Error: Expression type '[Lesson]' is ambiguous without more context
}
}
} `
und TasksTableView:` Import UIKit
Klasse TasksTableVC: UITableViewController {
var tasksList = [Lesson]()
override func viewDidLoad() {
super.viewDidLoad()
title = "Tasks"
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tasksList.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "taskCell", for: indexPath)
let taskList = tasksList[indexPath.section]
let tasks = taskList.tasks
let task = tasks[indexPath.row]
cell.textLabel?.text = String(describing: task)
return cell
}
} `
Vielen Dank im Voraus.
können Sie eine bildliche Darstellung oder einen Screenshot posten und es nebeneinander erklären . Es ist wirklich schwer, es so zu verstehen –
Hey, ich habe Valcaniaia Vorschlag genommen und es mit Structs gemacht, alles funktioniert gut, bis der Segue in LessonViewController-Datei, der Fehler, den ich bekomme, ist "Ausdruckstyp [Lektion]" ist mehrdeutig ohne mehr Kontext ". Vielleicht können Sie es lösen? – Julius
Dieser Fehlertyp tritt normalerweise auf, wenn der Compiler nicht genügend Informationen über Ihren benutzerdefinierten Typ enthält. Zum Beispiel haben Sie Ihr Array explizit als [Lektion] gegossen? aber es hätte [Lektion] sein sollen. Ich sage nur, nimm es nicht wörtlich im Zusammenhang mit deinem Code. Also müssen Sie Typen überprüfen und explizit definieren, wo Sie gedacht haben, dass der Compiler das für Sie tun sollte. Bearbeiten Sie Ihre Frage, ich werde es mir ansehen –