/ / Zmień kolejność UITableview z komórkami statycznymi w Code - ios, target-c, uitableview

Zmień kolejność UITableview w komórkach statycznych w Code - ios, target-c, uitableview

Mam UITableview z 7 Static Cells i każdegoKomórka ma przejście do innego widoku. Chcę sprawić, by komórki mogły się ponownie porządkować. Piszę reuseID i położenie każdej komórki na NSUserdefaults po tym, jak użytkownik ponownie uporządkuje komórki.

Ale jak mogę powiedzieć Tableview, gdzie Cell musi być wyświetlany, gdy widok jest (ponownie) załadowany.

Z poważaniem

Sztylet

Odpowiedzi:

3 dla odpowiedzi № 1

Zwykle, gdy używasz statycznego widoku tabeli, tynie zaimplementowałoby metod źródła danych, ale w tym przypadku wydaje się konieczne, aby to zrobić.Utworzyłem IBOutletCollection i dodałem moje komórki do tej tablicy (dodałem je w kolejności od pierwszej komórki do ostatniej, aby pojawiły się w poleceniu storyboard po pierwszym załadowaniu tabeli) W cellForRowAtIndexPath nie można usunąć kolejki komórek, ponieważ to nie działa w przypadku komórek statycznych, więc zamiast tego otrzymuję komórkę z kolekcji gniazd wyjściowych Mam osobną tablicę, która utrzymuje śledzenie kolejności pojawiania się komórek i to jest to, co zapisuję w domyślnych ustawieniach użytkownika. Oto kod, który działał w moich testach,

@interface StaticTableViewController ()
@property (strong,nonatomic) NSMutableArray *cells;
@property (strong, nonatomic) IBOutletCollection(UITableViewCell) NSArray *tableCells;

@end

@implementation StaticTableViewController

-(void)viewDidLoad {
[super viewDidLoad];
self.cells = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"cells"] mutableCopy];
if (! self.cells) self.cells = [@[@0,@1,@2,@3,@4] mutableCopy];
}



- (IBAction)enableReordering:(UIBarButtonItem *)sender {
[self.tableView setEditing:YES animated:YES];
}


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.cells.count;
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger idx = [self.cells[indexPath.row] integerValue];
UITableViewCell *cell = self.tableCells[idx];
return cell;
}



-(BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}


-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewCellEditingStyleNone;
}


- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
NSNumber *numberToMove = self.cells[fromIndexPath.row];
[self.cells removeObjectAtIndex:fromIndexPath.row];
[self.cells insertObject:numberToMove atIndex:toIndexPath.row];
[[NSUserDefaults standardUserDefaults] setObject:self.cells forKey:@"cells"];
[[NSUserDefaults standardUserDefaults] synchronize];
}