2011-07-07 9 views
5

Esto es lo que estoy tratando de lograr:Quiero un UITextField que está en UITableViewCell para convertirse primero en responder sólo cuando la célula tocó

Quiero un UITextField que está en UITableViewCell para convertirse primero en responder sólo cuando la célula tocado. Me gustaría que el campo de texto para convertirse en el primer nivel de respuesta sólo cuando me puse a primer nivel de respuesta en el método:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath` 

alguna idea de cómo se puede lograr esto? Cuando se toca directamente el campo de texto, nunca se llama al tableView:didSelectRowAtIndexPath:.

Gracias de antemano.

Respuesta

2

Supongo que tienes una UITableViewCell personalizada. En eso podrías tener un miembro UITextField. ¿Derecha?

En la clase de celda personalizado, reemplazar el método,

- (void)setSelected:(BOOL)selected animated:(BOOL)animated:

En eso, si se selecciona SÍ ==, a continuación, hacer que el campo de texto como primer nivel de respuesta. De lo contrario, renunciar a la primera respuesta.

1

Deje que un objeto sea el delegado de UITextField e implemente textFieldShouldBeginEditing:; devuelva NO si la celda no ha sido seleccionada. (Es posible que pueda volver siempre NO a partir de este método, si se llama becomeFirstResponder no pasa directamente del cheque.)

1

Para tener el campo de texto se convierten en el first responder Cuando se selecciona un uitableviewcell, utilice su textField como su property, y llamar a [self.textField1 becomeFirstResponder];

Nota: Necesitará tantas propiedades como su número de UITableViewCells ya que cada celda tiene un campo de texto.

Cuando se toca un textField, el compilador no sabrá que se seleccionó la fila correspondiente. Para esto, necesitará usar tags, como textField.tag == 0 para el primer textField, textField.tag ==1 para el segundo TextField y más. Y en el textFieldDidBeginEditing debe verificar la etiqueta y luego vincular ese valor con la fila correspondiente seleccionada.

¿Alguno de estos tiene sentido? :)

1

En primer lugar, necesita una celda de tabla personalizada, su propia subclase de UITableViewCell. En esa implementación, debe implementar hitTest: para determinar dónde ocurrió el contacto. En ese método, puede determinar si el toque fue, de hecho, dentro del rect de su UITextField, y si lo fue, convertirlo en el primer respondedor. He aquí un ejemplo de un código que escribí para un proyecto:

 
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    if (self.editing) { 
     if ([nickname pointInside:[self convertPoint:point toView:nickname] withEvent:nil]) 
      return [nickname hitTest:[self convertPoint:point toView:nickname] withEvent:event]; 

     return [super hitTest:point withEvent:event]; 
    } 

    return [self contentView]; 
} 

El atributo nickname, en este caso, fue un UITextField dentro de la costumbre UITableViewCell.

La condición alrededor de la autoedición puede o no ser relevante para su aplicación. La idea aquí es mostrarte cómo hitTest: podría usarse, en general.

Cuestiones relacionadas