Вызов конкретного раздела таблицы и строки для альтернативного перехода? (Программно) - PullRequest
0 голосов
/ 17 мая 2019

У меня проблема с вызовом определенного раздела таблицы и строки с использованием динамических ячеек.В таблицу встроен контроллер навигации, а в существующих ячейках используется переход от «detailSegue» к «LibraryViewController».Я бы хотел, чтобы конкретный раздел ячейки и строка перенаправлялись на контроллер альтернативного представления с переходом с заголовка «webSegue» на «WebViewController».

Это мой текущий код:

class LibraryTableViewController: UITableViewController {

    var selectedFileName = ""

    struct Objects {
        var sectionName : String
        var sectionObjects : [String]
        var sectionImages : [String]
    }

    var objectArray = [Objects]()

    override func viewDidLoad() {
        super.viewDidLoad()

        objectArray = [Objects(sectionName: "Led Zeppelin", sectionObjects: ["Houses Of The Holy", "Physical Graffiti", "Presence"], sectionImages: ["Houses Of The Holy", "Physical Graffiti", "Presence"]),
                       Objects(sectionName: "Dave Matthews Band", sectionObjects: ["Crash", "Before These Crowded Streets", "Everyday"], sectionImages: ["Crash", "Before These Crowded Streets", "Everyday"]),
                       Objects(sectionName: "Drake", sectionObjects: ["Scorpion", "Views", "So Far Gone"], sectionImages: ["Scorpion", "Views", "So Far Gone"]),
                       Objects(sectionName: "Jay-Z", sectionObjects: ["The Black Album", "American Gangster", "The Blueprint"], sectionImages: ["The Black Album", "American Gangster", "The Blueprint"]),
                       Objects(sectionName: "Others", sectionObjects: ["Other Albums", "User Guide"], sectionImages: ["Other Albums", "User Guide"])
        ]
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return objectArray.count
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return objectArray[section].sectionObjects.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "libraryCell", for: indexPath)
        cell.textLabel?.text = objectArray[indexPath.section].sectionObjects[indexPath.row]
        cell.imageView?.image = UIImage(named: objectArray[indexPath.section].sectionImages[indexPath.row])
        return cell
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return objectArray[section].sectionName
    }


    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedFileName = objectArray[indexPath.section].sectionObjects[indexPath.row]
        if indexPath.section == 4 && indexPath.row == 1
        {
            performSegue(withIdentifier: "webSegue", sender: self)
        }
        else
        {
        performSegue(withIdentifier: "detailSegue", sender: self)
        }
    }


    override func prepare(for segue: UIStoryboardSegue, sender: Any?){
        let objLibraryViewController = segue.destination as! LibraryViewController
        objLibraryViewController.fileName = selectedFileName
        }

}

Я установил оператор 'if' в 'didSelectRow';

if indexPath.section == 4 && indexPath.row == 1
        {
            performSegue(withIdentifier: "webSegue", sender: self)
        }
        else
        {
        performSegue(withIdentifier: "detailSegue", sender: self)
        }

, но конкретная ячейка, которую я вызываю, все еще использует 'detailSegue', который приводит меня к LibraryViewController.

ячейка, которую мне нужно перенаправить, - это ячейка "Другие альбомы", которая является 4-м разделом и 1-й строкой.

Чего мне не хватает, что приводит к игнорированию перехода к моему WebViewController?

1 Ответ

0 голосов
/ 17 мая 2019

Вы должны различать сегменты также в prepare(for, web segue выполняется без изменений.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "detailSegue" {
        let objLibraryViewController = segue.destination as! LibraryViewController
        objLibraryViewController.fileName = selectedFileName
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...