Spiegazione della dichiarazione - (IBAction) changeGreeting: (id) del mittente; i phone
-
25-10-2019 - |
Domanda
in tutto il mondo dicono che cosa è IBAction ma non riescono a spiegare ciò che tutto il mezzo di dichiarazione.
Qual è il mittente e l'ID?
Saluti, Namratha
Soluzione
-
Secondo le mie conoscenze
IBAction
solo implicavoid
-
id
è un tipo generico C, che accetta oggetti di qualsiasi tipo / classe. E 'un po' che cosa simile a puntatore nullo inC
. Possiamo usareid
come parametro di un metodo, in caso, se gli oggetti di differenza tipo di classi accedere a tale metodo. -
sender
, qui,- è un nome del parametro umana nome (è possibile il nome nulla)
- si riferisce all'oggetto che chiama il metodo
changeGreeting:
Esempio:
Consente di assumere il metodo changeGreeting:
è definito in ClassA
, e si legge come di seguito.
- (IBAction)changeGreeting:(id)sender {
[sender setText:@"Hello %@", [sender class]];
// Nothing can be returned from this method
}
E considera abbiamo le seguenti righe in Class B
.
// LINE 1
[aLabel addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];
// LINE 2
[aTextField addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];
In linea 1, aLabel
è il mittente e objOfClassA
rappresenta l' ricevitore . E in linea 2: aTextField
è la mittente e objOfClassA
è il ricevitore . HereaLabel
& aTextField
sono chiamati mittenti perché sono chiama il metodo changeGreeting:
. E objOfClassA
si chiama ricevitore perché il metodo objOfClassA's
changeGreeting:
è denominato qui.
Quando i tocchi utente all'interno aLabel
o aTextField
, loro text
verranno modificati in Hello UILabel
o Hello UITextField
rispettivamente.
L'altro modo:
Possiamo anche chiamare il metodo changeGreeting:
di objOfClassA
dal Class B
simile alla seguente.
[objOfClassA changeGreeting:aLabel];
[objOfClassA changeGreeting:aTextField];
Come il codice di cui sopra si spiega da sé, objOfClassA
è il ricevitore . Ma aLabel
& aTextField
non sono la mittenti . Perché non sono richiamando il metodo. Qui ci sono solo gli argomenti. Qui il mittente reale è Class B
, ma aLabel
e aTextField
sono passati nel (id)sender
argomento. In entrambi i casi il risultato dell'esecuzione metodo stesso.
Altri suggerimenti
Forse si dovrebbe verificare un tutorial Objective-C ( come questo ), in quanto questo è piuttosto semplice.
L'IBAction è definito come "vuoto", in modo che significa che il metodo non ha un valore di ritorno. E 'utile solo per Interface Builder, quindi sa quali dei vostri metodi sono in realtà l'azione è possibile creare un collegamento.
La parte (id) sender è un (unico) parametro per il metodo, che prende il nome del mittente. (Id) dice che il tipo di parametro può essere qualsiasi oggetto:
Qual è id?
E 'un tipo C generico che Objective-C utilizza per un oggetto arbitrario. [...]
IBAction
è una parola chiave (#define
'd a void
) che Interface Builder cerca nel codice sorgente, e se trova come un tipo di ritorno, si aggiungerà alla lista di azioni possibili è possibile cablare il vostro IB elementi a.
id
è un tipo di oggetto generico in Objective-C che denota qualsiasi Objective-C oggetto.
e sender
è solo il nome del parametro id
-digitato.
Funzionalmente dicendo: IBAction è una parola chiave per identificare i metodi che è possibile collegare al attraverso Interface Builder. (Id) mittente è necessario individuare l'oggetto è innescare il metodo in caso si utilizza lo stesso metodo per diversi controlli.