2012-02-01 10 views
7

Tworzę menu "ulubione strony" w mojej aplikacji do przeglądania tabel, gdzie użytkownicy mogą zapisywać swoje ulubione strony internetowe, a następnie nawigować do nich w menu.Pozwól użytkownikowi edytować tekst w komórce UITableView

Dla ułatwienia zapamiętania, który link jest, chcę umożliwić użytkownikowi kliknięcie przycisku z napisem "edytuj", jakoś wybrać komórkę, której nazwę chcesz edytować, a następnie wpisać nową nazwę i zmień nazwę komórki na wpisaną przez użytkownika. Aktualnie używam wbudowanej aplikacji ustawień, aby zapisać dane łącza.

Nie muszę znać każdego aspektu tego, o co właśnie poprosiłem. Chcę tylko wiedzieć, czy użytkownik może edytować tekst komórki widoku tabeli i jakie metody użyłbym do tego.

Widziałem inne pytania, które dotyczą podobnego problemu, ale generalnie z bardziej programistycznej podstawy.

+0

możliwe duplikat [edycji UITableView z pola tekstowego o każdej komórce] (http://stackoverflow.com/questions/7064525/editable-uitableview-with-a-textfield- na każdą komórkę) –

+0

@Jim thanks, ale ten post odnosi się do tego, że osadzone pole tekstowe jest zawsze otwarte. – DGund

Odpowiedz

7

Użytkownik nie może bezpośrednio edytować tekstu komórki widoku tabeli. (Z technicznego punktu widzenia byłby to cell.textLabel.text). Jeśli jednak przejdą one w tryb "edycji", możesz łatwo wyświetlić UITextField w komórce (lub w widoku modalnym), który jest wstępnie wypełniony bieżącą wartością, pozwolić na edycję, zapisanie, a następnie aktualizację cell.textLabel. wartość tekstu samodzielnie.

+0

Wygląda jak logiczne obejście. – DGund

-1

Więc myślę, że najlepszym sposobem jest użycie komendy editview tablicy. Możesz użyć tableview delegate set cell editstyle. Możesz zrobić coś, co chcesz, gdy użytkownik edytuje komórkę. Ustaw styl komórka:

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

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

Czy rzeczy, gdy przycisk użytkownik Kliknij przycisk Edytuj w:

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

To nie jest ten sam rodzaj "edycji" - ten rodzaj edycji odnosi się do przeniesienia komórki lub jej usunięcia. – Rayfleck

+0

-1 za to, co powiedział @Rayfleck. Usunięcie tej odpowiedzi może być właściwą odpowiedzią lub możesz odpowiedzieć na komentarze. –

6

Twoje UITableView komórki tworzone są tu zwykle

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

(jeden z delegatów na UITableView).

Więc jeśli podklasę UITableViewCell i wystawić właściwość text, możesz zrobić, co chcesz, w tym przechowywania instancji UITextField w komórce. Upewnij się, że używasz kasownika tak, jak normalnie.

Następnie, gdy użytkownik dotyka UITableViewCell można dać UITextField ostrość:

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

Jeśli się UITableViewCell podklasa się UITextFieldDelegate i uczynić go delegata dla pola tekstowego, można łatwo obsługiwać te nieznośno trudne do zapamiętania metody:

- (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; 
} 
Powiązane problemy