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

Подготовьтесь к Segue в Swift

Я столкнулся с сообщением об ошибке:

"UIStoryboardSegue does not have a member named 'identifier'"

Здесь код, вызывающий ошибку

if (segue.identifier == "Load View") {
    // pass data to next view
}

В Obj-C он отлично работает следующим образом:

if ([segue.identifier isEqualToString:@"Load View"]) {
   // pass data to next view
}

Что я делаю неправильно?

4b9b3361

Ответ 1

Это связано с проблемой в шаблоне подкласса UITableViewController. Он поставляется с версией метода prepareForSegue, который потребовал бы, чтобы вы развернули segue.

Замените текущую функцию prepareForSegue на:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "Load View") {
        // pass data to next view
    }
}

Эта версия неявно разворачивает параметры, поэтому вы должны быть в порядке.

Ответ 2

Свифт 4, Свифт 3

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "MySegueId" {
        if let nextViewController = segue.destination as? NextViewController {
                nextViewController.valueOfxyz = "XYZ" //Or pass any values
                nextViewController.valueOf123 = 123
        }
    }
}

Ответ 3

Я думаю, проблема в том, что вы должны использовать! разделить идентификатор

У меня

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
        if segue!.identifier == "Details" {
            let viewController:ViewController = segue!.destinationViewController as ViewController
            let indexPath = self.tableView.indexPathForSelectedRow()
            viewController.pinCode = self.exams[indexPath.row]

        }

    }

Я понимаю, что без! вы просто получаете истинное или ложное значение

Ответ 4

Для Swift 2.3, swift3 и swift4:

Создайте перформанс Segue на didSelectRowAtindexPath

Например:

   self.performSegue(withIdentifier: "uiView", sender: self)

После этого создайте функцию prepareforSegue, чтобы поймать переход Destination и передать значение:

Пример:

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

       if segue.identifier == "uiView"{

        let destView = segue.destination as! WebViewController
        let indexpath = self.newsTableView.indexPathForSelectedRow
        let indexurl = tableDatalist[(indexpath?.row)!].link
        destView.UrlRec = indexurl

        //let url =

    }
    }

Вам необходимо создать переменную с именем UrlRec в Destination ViewController

Ответ 5

Swift 1.2

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
            if (segue.identifier == "ShowDeal") {

                if let viewController: DealLandingViewController = segue.destinationViewController as? DealLandingViewController {
                    viewController.dealEntry = deal
                }

            }
     }

Ответ 6

Подготовьтесь к Segue в Swift 4.2 и Swift 5.

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "OrderVC") {
        // pass data to next view
        let viewController = segue.destination as? MyOrderDetailsVC
        viewController!.OrderData = self.MyorderArray[selectedIndex]


    }
}

Как вызывать переход на конкретное событие (например, нажатие кнопки и т.д.):

performSegue(withIdentifier: "OrderVC", sender: self)

Ответ 7

Это один из способов, которыми вы можете использовать эту функцию, это когда вы хотите получить доступ к переменной другого класса и изменить вывод на основе этой переменной.

   override func prepare(for segue: UIStoryboardSegue, sender: Any?)  {
        let something = segue.destination as! someViewController
       something.aVariable = anotherVariable
   }

Ответ 8

При условии, что вы не используете один и тот же контроллер представления назначения с разными идентификаторами, код может быть более кратким, чем другие решения (и в некоторых других ответах не используется as!):

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    if let myViewController = segue.destinationController as? MyViewController { 
        // Set up the VC
    }
}

Ответ 9

Измените идентификатор segue на правой панели в разделе с идентификатором. значок, соответствующий строке, которую вы использовали в условном выражении.

Ответ 10

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
        if(segue!.identifier){
            var name = segue!.identifier;
            if (name.compare("Load View") == 0){

            }
        }
    }

Вы не можете сравнить идентификатор с ==, вы должны использовать метод compare()