2016-07-16 135 views
8

Sto leggendo la documentazione Apples swift (iOS) ma è scritto per Swift 2 e uso Swift 3. Voglio aggiungere un pulsante a livello di codice ma sembra che ci sia un cambiamento e non riesco a trovare come per risolverlo.Swift3: pulsante Aggiungi con codice

ecco il codice per l'esempio Swift 2:

import UIKit 

class RatingControl: UIView { 

// MARK: Initialization 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 

    // Buttons 
    let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44)) 
    button.backgroundColor = UIColor.red() 
    button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), forControlEvents: .TouchDown) 
    addSubview(button) 
} 

override func intrinsicContentSize() -> CGSize { 
    return CGSize(width: 240, height: 44) 
} 

// MARK: Button Action 

func ratingButtonTapped(button: UIButton){ 
    print("Button pressed") 
} 
} 

L'unico cambiamento che ho fatto dopo il 'Fix-It' ha mostrato l'errore è presente nel selettore:

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(button:)), for: .touchDown) 

Questo dovrebbe aver stampato "Button pressed" ma non è così. Qualsiasi aiuto?

+0

cosa circa il metodo di RatingControl.ratingButtonTapped (tasto :)? Dipende dalla sua implementazione. –

+0

Non so se questo è un problema dato che tutto ciò che ho scritto proviene da esempio di mele ... ecco il link: tinyurl.com/q5oouqz –

+0

@OnurTuna il selettore si riferisce solo a esso, non dovrebbe dipendere dall'implementazione – Gerald

risposta

12

Prova qualcosa del genere. Non ho provato ma dovrebbe funzionare:

let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44)) 
button.backgroundColor = UIColor.red 
button.addTarget(self, action: #selector(ratingButtonTapped), for: .touchUpInside) 
addSubview(button) 

func ratingButtonTapped() { 
    print("Button pressed") 
} 
+0

Grazie che mi ha aiutato molto. –

2

Trovato la soluzione. Per qualche motivo:

func ratingButtonTapped(button: UIButton) 

ha bisogno di un "_" prima del pulsante. Così dovrebbe essere:

func ratingButtonTapped(_ button: UIButton) 

E l'altra parte del codice deve essere:

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), for: .touchDown) 

Grazie per l'aiuto :) Il vostro metodo può essere corretta anche, ma questo è quello che Apple vuole esso.

+1

In swift 3, tutti i parametri sono nominati, anche il primo parametro, a differenza di swift 2. una soluzione migliore è '#selector (RatingControl.ratingButtonTapped (button :))'. in questo modo non è necessario modificare la funzione solo per utilizzarla nel selettore – Gerald

17

Il mio codice:

button.backgroundColor = UIColor.red 

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), for: .touchDown) 

override var intrinsicContentSize : CGSize { 
//override func intrinsicContentSize() -> CGSize { 
    //... 
    return CGSize(width: 240, height: 44) 
} 

// MARK: Button Action 
func ratingButtonTapped(_ button: UIButton) { 
    print("Button pressed ") 
} 
+0

Grazie, questa è la risposta corretta in termini di problema nei documenti quando si utilizza Swift 3 anziché 2. – meburbo

Problemi correlati