使用Code中的静态单元格重新排序UITableview

时间:2014-06-16 13:33:50

标签: ios objective-c uitableview

我有一个带有7个静态单元的UITableview,每个Cell都有一个到另一个View的segue。我想让细胞重新排序。 我在用户重新排序单元格后,将每个Cell的reuseID和位置写入NSUserdefaults。

但是如何在(重新)加载视图时告诉Tableview哪个Cell需要显示。

祝你好运

德克

1 个答案:

答案 0 :(得分:4)

通常,在使用静态表视图时,您不会实现数据源方法,但在这种情况下,似乎有必要这样做。我创建了一个IBOutletCollection,并将我的单元格添加到该数组中(我按照从第一个单元格到最后一个单元格的顺序添加它们,因此它们将在第一次加载表格时出现在故事​​板顺序中)。在cellForRowAtIndexPath中,您无法将单元格出列,因为这对静态单元格不起作用,因此我从出口集合中获取单元格。我有一个单独的数组,可以跟踪单元格应该出现的顺序,这就是我保存到用户默认值的内容。这是我的测试中的代码,

@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];
}