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];
È stato utile?

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

vedi qui

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top