2015-09-26 18 views
5

Sto scrivendo un'app tipo di lista delle cose da fare, per imparare rapidamente per lo sviluppo iOS. Avevo un pulsante impostazioni sulla barra di navigazione, sul lato destro, e ogni volta che una persona faceva clic su un pulsante nella parte superiore della vista tabella, potevano aggiungere un nuovo elemento al loro elenco. Ciò fa sì che un pulsante "annulla" appaia sul lato sinistro della barra e un pulsante "aggiungi" appaia sul lato destro. Quando la persona ha finito, tuttavia, quei pulsanti scompaiono, quindi ricalcolo in modo programmatico il pulsante delle impostazioni, con una chiamata a una funzione che dovrebbe chiamare il seguito.Il selettore non funziona sul mio swift UIBarButtonItem

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: nil, action: Selector("showSettings:")) 

Questo è il codice che crea il pulsante sulla barra di navigazione (ed è davvero creato)

func showSettings(sender: AnyObject?) { 
    print("segueShouldBeDone!") 
    performSegueWithIdentifier("showSettings", sender: sender) 
} 

E questa è la funzione che dovrebbe chiamare la segue (ho aggiunto la stampa vedi se è stato almeno chiamato, e non lo è).

Ho avuto questo stesso problema in un altro posto nel mio codice, ma avevo rinunciato a ripararlo perché non era poi così importante per me. Ma ora interferisce su come funziona l'app, quindi volevo sapere come risolverlo.

Qualsiasi aiuto sarebbe fantastico.

+0

@LeoDabus Sebbene tu abbia ragione e avrei dovuto farlo, in realtà non ha cambiato nulla, il che mi fa impazzire. L'immagine era già stata mostrata. – AugustoQ

risposta

10

Il tuo selettore showSettings: non viene chiamato perché è stato specificato nil anziché self per la destinazione dell'elemento del pulsante della barra. Modificare la riga per:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("showSettings:")) 

Questa assumere il metodo showSettings: è nella stessa classe che contiene questa riga di codice.

Leggere la documentazione per questo inizializzatore, in particolare le informazioni sul parametro target.

+0

Sì, è stato risolto. Ma anche quando la funzione 'showSettings' non ha preso alcun parametro (e ho usato" showSettings "come selettore), non ha funzionato. Il mittente di follow deve essere diverso da 'nil'? L'altro posto in cui lo stavo usando (come menzionato nella domanda), non ha preso alcun parametro, e anche la funzione non è stata richiamata. Questo mi confonde perché l'ho usato per creare i pulsanti "Aggiungi" e "Annulla" con 'target: nil', e funzionano bene. – AugustoQ

+0

Passare 'self' invece di' nil' all''inizializzatore 'UIBarButtonItem' non ha assolutamente nulla a che fare con il parametro' sender' passato al metodo 'showSettings:' e nulla a che fare con il seguito. – rmaddy

+0

Perché i miei altri UIBarButtonItem funzionavano quando avevano il target 'nil', e questi altri due no? Qualche idea? – AugustoQ

Problemi correlati