2012-02-09 13 views
5

Powiel możliwe:
How to do edit-in-place in a UITableView?Montaż TextLabel w UITableViewCell

Jestem nowy w tym re rozwijających się. Po prostu chcę wiedzieć, jak edytować/aktualizować UITextLabel w tableView.

Używam już animacji edit/done i mogę usuwać wiersze, ale nie jestem w stanie uzyskać sposobu edycji tekstu w tych wierszach.

Chcę, aby użytkownik edytował etykietę z komórką. Po naciśnięciu przycisku edycji.

Już przeszukaliśmy witrynę, ale nie mogłem uzyskać dokładnej odpowiedzi.

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"]; 
if(!cell) 
{ 
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"]autorelease]; 
    cell.editingAccessoryType=YES; 
} 


myTextField = [[UITextField alloc] initWithFrame:CGRectMake(15, 6, 241, 31)]; 
myTextField.backgroundColor = [UIColor clearColor]; 
myTextField.textAlignment = UITextAlignmentLeft; 
myTextField.returnKeyType = UIReturnKeyDone; 
myTextField.delegate = self; 
cell.accessoryView = myTextField; 
myTextField.text = [self.arrayOfItems objectAtIndex:indexPath.row]; 
myTextField.enabled = NO; 
return cell; 
} 

-(IBAction)Edit:(id)sender 
{ 
if(self.editing) 
{ 
      [myTextField.Enabled = YES]; 
    [super setEditing:NO animated:NO]; 
    [self.tab setEditing:NO animated:NO]; 
    [self.tab reloadData]; 
    [self.navigationItem.rightBarButtonItem setTitle:@"Done"]; 
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain]; 
} 
else 
{ 
    myTextField.enabled= YES; 

    [super setEditing:YES animated:YES]; 
    [self.tab setEditing:YES animated:YES]; 
    [self.tab reloadData]; 
    [self.navigationItem.rightBarButtonItem setTitle:@"Edit"]; 
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone]; 
} 
} 

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (self.editing == NO || !indexPath) 
return UITableViewCellEditingStyleNone; 
if (self.editing && indexPath.row == ([self.arrayOfItems count])) 
{ 
    return UITableViewCellEditingStyleInsert; 
} 
else 
{ 
    return UITableViewCellEditingStyleDelete; 
} 
return UITableViewCellEditingStyleNone; 
} 

To nie działa na me.textfield zanika jeśli uderzę przycisk Edytuj

Odpowiedz

1

Edycja tekstu w samych wierszach tabeli jest trudna, ponieważ trzeba zarządzać klawiaturą i przewijać edytowalne pole, aby zrobić miejsce na klawiaturę itp. (Które można przewijać podczas edycji itp.). Również, jeśli zmienisz każdą komórkę, musisz zarządzać edytowaną wartością, która może być przewijana poza ekranem w trakcie edycji itp. (Tj. Gdy klawiatura jest aktywna itd.).

UILabel nie jest edytowalny, do edycji tekstu potrzebny jest UITextField.

Najlepszym sposobem na dokonanie edycji wartości w komórce tabeli jest prawdopodobnie przesunięcie nowego kontrolera widoku na stos akcji edycji i posiadanie tam edytowalnego pola tekstowego oraz dodanie elementów przycisku zapisu/anulowania przycisku paska do menu tego kontrolera widoku.

Gdy użytkownik naciśnie przycisk Zapisz, zaktualizuj model za widokiem tabeli z odpowiednią wartością tekstową i ponownie zdejmij kontroler widoku ze stosu. Główny widok zawierający wywołanie tabeli reloadData w tableView w metodzie viewWillAppear.

Zapewni to najłatwiejszą/najlepszą kontrolę zachowania klawiatury i jej edycji podczas edytowania pól.

+3

Podczas gdy to nie odpowiada na pytanie, jak wykonać edycję tekstu w tabeli, przedstawia ona kilka ważnych punktów, dla których może nie być dobrym pomysłem w każdych okolicznościach. –

0

Jeśli używasz standardowego UITableViewCell, można wykonać następujące czynności:

//Get the first cell of the first section 
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0]; 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:ip]; 

//Change the textLabel contents 
[[cell textLabel] [email protected]"Updated text"]; 

//Refresh the tableView 
[tableView reloadData]; 
+0

Chcę edytować textLabel dynamicznie po naciśnięciu przycisku edycji. –

+0

To pozwala ci to zrobić. PORADA nie uruchamiaj "tableView reloadData", ponieważ spowoduje to zastąpienie animacji komórki po przejściu do trybu edycji. –

-2
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
......... 

cell.textLabel.text = @"my text"; 

return cell; 
} 
+0

To nie jest dokładnie to, czego chce. –

+0

Chcę edytować/zaktualizować textLabel. –

+0

Więc chcesz zmienić 'textLabel' z' UITableCell' w swoim kodzie lub chcesz, aby użytkownik mógł edytować tekst komórki? –

1

Użyj UITextField zamiast UILabel w komórce niestandardowej, a następnie edytuj dla niestandardowej komórki Możesz sprawdzić to Tutorial lub możesz to sprawdzić Apple Sample również.

+0

Nie jestem pewien, jak to zrobić. Czy możesz napisać jakiś kod? –

+0

Edytowałem już odpowiedź i dałem ci link do dostosowywania TableViewCell –

+0

Jeśli masz rozwiązanie z mojej odpowiedzi, zaakceptuj to. –