ios - Quiero que UItextField que está en UITableViewCell se convierta en el primer respondedor solo cuando la célula se toca
ios4 first-responder (4)
Esto es lo que intento lograr:
Quiero un UITextField
que está en UITableViewCell
para convertirse en primer respondedor solo cuando se toca la celda. Me gustaría que el campo de texto se convierta en el primer respondedor solo cuando lo configuro para el primer respondedor en el método:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`
¿Alguna idea de cómo puedo lograr esto? Cuando el campo de texto se toca directamente, tableView:didSelectRowAtIndexPath:
nunca se llama.
Gracias por adelantado.
Deje que un objeto sea el delegado de UITextField e implemente textFieldShouldBeginEditing:
devuelve NO
si la celda no ha sido seleccionada. (Es posible que siempre siempre devuelva NO desde este método, si llama a becomeFirstResponder
directamente pasa por alto el cheque).
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 toque. 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. Aquí hay 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 nickname
atributo, en este caso, era un UITextField dentro de la UITableViewCell personalizada.
La condición en torno a 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.
Para que textField se convierta en el first responder
cuando se selecciona uitableviewcell
, use textField como su property
y llame 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, etc. Y en textFieldDidBeginEditing
debe verificar la etiqueta y luego vincular ese valor con la fila correspondiente seleccionada.
¿Alguno de estos tiene sentido? :)
Supongo que tienes una UITableViewCell personalizada. En eso podrías tener un miembro UITextField. ¿Derecha?
En la clase de celda personalizada, anule el método,
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
:
En eso, si se selecciona == SÍ, entonces haga que el campo de texto sea el primer respondedor. De lo contrario, renunciar a la primera respuesta.