Pregunta

I tiene un UITableView con 15 células, cada una con un cuadro de texto por separado en el mismo. He implementado UITextViewDelegate y yo soy capaz de datos TextView cambiado recibidas utilizando textViewDidChange (etc). Pero tengo un gran problema sigue siendo, ¿cómo puedo saber qué TextView envió esto, (es decir, en qué célula se altera el TextView?)

Es interesante tener mucho trabajo, pero no sabe exactamente de dónde viene.

Un montón de código está disponible si es necesario.

Saludos @norskben

Código

// 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];
¿Fue útil?

Solución

Puede asignar etiquetas (números enteros) a los diferentes puntos de vista y consultar el número de la etiqueta para ver qué vista llamada al método. Busque la propiedad de etiqueta en la vista:

tag

The receiver’s tag, an integer that you can use to identify view objects in your application.

@property(nonatomic) NSInteger tag

ver aquí

Otros consejos

No, en mi máquina de desarrollo, pero cuando se crea la UITextView usted debe ser capaz de asignar una etiqueta. Creo que es [myTextView setTag: x]; donde x es un número entero.

A continuación, en el uso TextViewDidChange if (textview.tag == x) { //do something } else if (textview.tag == y) { //do something else and so on }

Espero que ayude un poco.

Las vistas de texto pasa una referencia a sí mismos en cada método delegado para que sepa cuál lo envió. Para realizar una conexión a la celda, me puse propiedad tag de cada vista de texto a un valor diferente que corresponde a la fila de la celda que se encuentran.

Esta es una pregunta importante: ¿Está el texto cajas estática, o puede que cambie con el tiempo? Si no van a cambiar (el usuario no puede alterar el número de células o añadir más adelante), entonces se puede declarar un nuevo textField para cada celda. Tengo algo similar en mis aplicaciones. Tengo dos cuadros de texto, y dependiendo de qué textField está actualmente activo, el delegado hace algo diferente.

Declarar campos de texto separados en el encabezado

UITextField *textField1;
UITextField *textField2;
UITextField *textField3;

en el método delegado, si el uso bloques de instrucciones para saber qué textField está cambiando:

if (textField == textField1) {
    //do something
} else if (textField == myTextField2) {
    //something else
}

Tenga en cuenta que esto realmente sólo funciona si su vista es estática.

Espero que esto ayude

Tiene un gran día

Cuando usted está buscando las células del UITableView para la UITextView origen del evento, sólo se iterar sobre las células que el usuario puede ver actualmente. Esto puede obtenerse usando el siguiente método UITableView:

- (NSArray *)visibleCells
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top