Pergunta

Estou enfrentando a mensagem de erro:

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

Aqui está o código que causa o erro

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

No Obj-C tudo bem usar assim:

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

O que estou fazendo de errado?

Foi útil?

Solução

Isto parece ser devido a um problema no UITableViewController modelo de subclasse.Ele vem com uma versão do prepareForSegue método que exigiria que você desembrulhasse o segue.

Substitua seu atual prepareForSegue funcionar com:

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

Esta versão desembrulha implicitamente os parâmetros, então você deve ficar bem.

Outras dicas

Rápido 4, Rápido 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
        }
    }
}

Acho que o problema é que você tem que usar o !desagregar identificador

Eu tenho

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]

        }

    }

Meu entendimento é que sem o !você apenas obtém um valor verdadeiro ou falso

Para Swift 2.3, Swift3 e Swift4:

Crie um Segue de execução em didSelectRowAtindexPath

Por exemplo:

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

Depois disso, crie uma função prepareforSegue para capturar o Destination segue e passar o valor:

Ex:

  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 =

    }
    }

Você precisa criar uma variável chamada UrlRec no Destination ViewController

Rápido 1.2

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

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

            }
     }

Prepare-se para Segue no Swift 4.2 e 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]


    }
}

Como chamar segue em um evento específico (como clique no botão, etc.):

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

esta é uma das maneiras de usar esta função, é quando você deseja acessar uma variável de outra classe e alterar a saída com base nessa variável.

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

Desde que você não esteja usando o mesmo controlador de visualização de destino com identificadores diferentes, o código pode ser mais conciso que as outras soluções (e evita o as! em algumas das outras respostas):

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

Altere o identificador segue no painel direito da seção com um id.ícone para corresponder à string que você usou em sua condicional.

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

            }
        }
    }

Você não pode comparar o identificador com == você tem que usar o método compare()

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top