Подтвердить что ты не робот

Передача данных через segue

Я делаю простое приложение iOS с контроллером tableview и detailView. Все, что я хочу, это передать данные через segue.

this is how it looks like

вот как это выглядит.

Все, что я хочу, это то, что вы нажмете на "Markíza", он откроет URL-адрес видеоролика 1, и если вы нажмете на "TV JOJ", он откроет URL-адрес видеоролика 2 в проигрывателе.

Мои ячейки таблицы:

    struct Program {
        let category : String
        let name : String
    }


   var programy = [Program]()
        self.programy = [Program(category: "Slovenské", name: "Markíza"),
                         Program(category: "Slovenské", name: "TV JOJ")]
4b9b3361

Ответ 1

Swift работает точно так же, как Obj-C, но перерабатывается на новом языке. У меня не так много информации из вашего сообщения, но дайте имя каждому TableViewController, чтобы помочь с моим объяснением.

HomeTableViewController (это скриншот, который у вас выше)

PlayerTableViewController (это экран игрока, к которому вы хотите перейти)

С учетом сказанного, в PlayerTableViewController вам нужно иметь переменную, которая будет хранить переданные данные. Просто под вашим объявлением класса есть что-то вроде этого (если вы намерены хранить структуру как отдельный объект, а не массив:

class PlayerTableViewController: UITableViewController {

    var programVar : Program?

    //the rest of the class methods....

После этого есть два способа отправить данные в новый TableViewController.

1) Использование prepareForSegue

В нижней части HomeTableViewController вы будете использовать методы prepareForSegue для передачи данных. Ниже приведен пример кода, который вы будете использовать:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    // Create a variable that you want to send
    var newProgramVar = Program(category: "Some", name: "Text")

    // Create a new variable to store the instance of PlayerTableViewController 
    let destinationVC = segue.destinationViewController as PlayerTableViewController
    destinationVC.programVar = newProgramVar
    }
}

После загрузки PlayerTableViewController эта переменная будет уже установлена ​​и использована

2) Использование didSelectRowAtIndexPath

Если необходимо отправить конкретные данные на основе выбранной ячейки, вы можете использовать didSelectRowAtIndexPath. Чтобы это сработало, вам нужно дать вашему segue имя в представлении раскадровки (дайте мне знать, если вам нужно знать, как это сделать).

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    // Create a variable that you want to send based on the destination view controller 
    // You can get a reference to the data by using indexPath shown below
    let selectedProgram = programy[indexPath.row]

    // Create an instance of PlayerTableViewController and pass the variable
    let destinationVC = PlayerTableViewController()
    destinationVC.programVar = selectedProgram

    // Let assume that the segue name is called playerSegue
    // This will perform the segue and pre-load the variable for you to use
    destinationVC.performSegueWithIdentifier("playerSegue", sender: self)
}

Сообщите мне, если вам нужна другая информация об этом

Ответ 2

С Swift 3 и 4

В первом ViewController (отправить значение)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "MainToTimer") {
        let vc = segue.destination as! YourViewController
        vc.verificationId = "Your Data"
    }
}

Во втором viewController (Catch The Value)

var verificationId = String()

Ответ 3

Если вам не нужно распознавать действие по идентификатору, а только по целевому классу...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? YourViewController {
        vc.var_name = "Your Data"
    }
}