2012-02-01 9 views
7

Estoy creando un menú de "páginas favoritas" en mi aplicación de vista de tabla, donde los usuarios pueden guardar sus páginas web favoritas y luego navegar por ellas más fácilmente a través del menú.Permitir que un usuario edite el texto en una celda UITableView

Para recordar fácilmente qué enlace es el cual, quiero permitir que el usuario haga clic en un botón que dice "editar", de alguna manera seleccione la celda que desea editar, y luego escriba el nuevo nombre y hacer que la celda cambie su nombre a lo que escribió el usuario. Actualmente estoy usando la aplicación de configuración integrada para guardar los datos del enlace.

No necesito saber todos los aspectos de lo que acabo de preguntar. Solo quiero saber si es posible que el usuario edite el texto de una tabla, y qué métodos usaría para hacerlo.

He visto otras preguntas que cubren un terreno similar, pero generalmente desde una base más programática.

+0

posible duplicado de [editable UITableView con un campo de texto en cada celda] (http://stackoverflow.com/questions/7064525/editable-uitableview-with-a-textfield- en cada celda) –

+0

@Jim gracias, pero esa publicación se refiere a que el campo de texto incrustado está siempre abierto. – DGund

Respuesta

7

El usuario no puede editar directamente el texto de la celda de una tabla vista. (Técnicamente, sería el cell.textLabel.text). Sin embargo, si entran en un modo de "edición", podría mostrar fácilmente un UITextField en la celda (o en una vista modal) que se rellena previamente con el valor actual, les permite editarlo, guardarlo y luego actualizar la etiqueta de celda de texto. texto valor usted mismo.

+0

Parece la solución lógica. – DGund

-1

Por lo tanto, creo que la mejor manera es utilizar tabelview cell editstyle. Puede usar el estilo de edición de celdas del conjunto de delegados de tableview. Puede hacer lo que desee cuando el usuario edite la celda. estilo de celda Situado en:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath 

hacer las cosas cuando el usuario haga clic botón de edición en:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
+0

Este no es el mismo tipo de "edición": este tipo de edición se refiere a mover la celda o eliminarla. – Rayfleck

+0

-1 por lo que @Rayfleck dijo. Eliminar esta respuesta podría ser la respuesta correcta, o podría responder a los comentarios. –

6

se crean aquí Sus células UITableView, por lo general

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

(uno de los delegados de el UITableView).

Así que si subclase UITableViewCell y expone una propiedad text, puede hacer lo que desee, incluida la celebración de una instancia UITextField en la Celda. Asegúrate de usar el material de dequeue como lo harías normalmente.

Entonces, cuando el usuario toca la UITableViewCell le pueden dar la UITextField el foco:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self.thatTextFieldIMentioned becomeFirstResponder]; 
} 

Si usted hace la UITableViewCell subclase un UITextFieldDelegate y hacer que el delegado para el campo de texto, puede manejar con facilidad estos métodos molesto y difíciles de recordar:

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    NSLog(@"yeah inform someone of my change %@", textField.text); 
} 

- (BOOL)textFieldShouldClear:(UITextField *)textField { 
    return YES; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 
Cuestiones relacionadas