cellule iphone Tableview con TextView personalizzato - semplicemente riferimento TextView
-
22-09-2019 - |
Domanda
Ho un UITableView con 15 celle, ciascuna con una casella di testo distinto in esso. Ho implementato UITextViewDelegate e sono in grado di dati TextView modificati ricevuti utilizzando textViewDidChange (ecc). Ma ho un grosso problema ancora, come faccio a sapere quale TextView ha inviato questa, (vale a dire in quale cella è stata modificata la TextView?)
La sua interessante avere così tanto lavoro, ma non so esattamente da dove viene.
Un sacco di codice è disponibile a richiesta.
Saluti @norskben
Codice
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
//Big Text Box
UITextView *detailLabel = [[UITextView alloc] initWithFrame:CGRectMake(30, 80, CONST_Cell_width, 150)];
detailLabel.tag = 20;
[cell.contentView addSubview:detailLabel];
}
UITextView * detailLabel = (UITextView *) [cell.contentView viewWithTag:20];
Soluzione
È possibile assegnare tag (interi) ai diversi punti di vista e interrogare il numero di targa per vedere quale vista chiamato il metodo. Cercare la proprietà tag sulla vista:
tag
The receiver’s tag, an integer that you can use to identify view objects in your application.
@property(nonatomic) NSInteger tag
Altri suggerimenti
Non a mia macchina di sviluppo, ma quando si crea l'UITextView si dovrebbe essere in grado di assegnare un tag. Penso che sia [myTextView setTag: x]; dove x è un numero intero.
Poi, nell'uso TextViewDidChange
if (textview.tag == x) {
//do something
} else if (textview.tag == y) {
//do something else and so on
}
La speranza che aiuta un po '.
I punti di vista di testo passano un riferimento a se stessi in ogni metodo delegato in modo da sapere quale lo ha inviato. Per effettuare una connessione con il cellulare, mi piacerebbe impostare la proprietà tag
di ogni vista di testo a un valore diverso che corrisponde alla riga della cella cui si trovano.
Ecco una domanda importante: sono le vostre caselle di testo statico, o possono cambiare nel corso del tempo? Se non cambieranno (l'utente non può modificare il numero di cellule o aggiungere più avanti), allora si può dichiarare una nuova textField per ogni cella. Ho qualcosa di simile nei miei apps. Ho due caselle di testo, e seconda di quale textField è attualmente attiva, il delegato fa qualcosa di diverso.
Dichiarare campi di testo separati nell'intestazione
UITextField *textField1;
UITextField *textField2;
UITextField *textField3;
nel metodo delegato, utilizzare se blocchi di istruzioni per scoprire che textField sta cambiando:
if (textField == textField1) {
//do something
} else if (textField == myTextField2) {
//something else
}
Si noti che questo funziona davvero solo se il vostro punto di vista è statica.
Spero che questo aiuti
Hanno un grande giorno
Quando sei alla ricerca le cellule del UITableView per l'UITextView origine evento, solo iterare sulle celle che l'utente attualmente può vedere. Questo può essere ottenuto utilizzando il seguente metodo UITableView:
- (NSArray *)visibleCells