У меня есть список людей, которые занимают места. Я хочу, чтобы пользователь мог перегруппировать этих людей в разные места, однако некоторые пятна не работают. Я думал, что это будет наиболее легко реализовано с использованием возможностей перестановки UITableView. Однако я не могу понять, как держать мои недоступные пятна неподвижными.При перемещении ячеек в UITableView, как сделать ячейку неподвижной?
Например, я хочу переместить Activia Boulanger на место 5. Серые клетки должны быть неподвижными.
Начинающему вид:
Что UITableView делает автоматически:
То, что я хочу сделать UITableView:
Установка tableView:canMoveRowAtIndexPath:
, по-видимому, просто мешает вам перемещать ячейку, но не препятствует движению клетки в реакции на движения других ячеек.
Любая помощь была бы принята с благодарностью. Благодаря
UPDATE: Ниже приведен пример кода с установкой для этой проблемы. Я не включил свои усилия в решение, потому что все они потерпели неудачу, и все это загромождает.
#import "LDYViewController.h"
static NSString * unmoveableCellId = @"NoMove";
static NSString * moveableCellId = @"OkMove";
@implementation LDYViewController
@synthesize tableView;
@synthesize peopleList;
- (void)viewDidLoad
{
[super viewDidLoad];
peopleList = [[NSMutableArray alloc] initWithObjects:
@"Belinda Boomer", @"Activia Boulanger", @"Arnold Carter", [NSNull null], @"Attila Creighton", [NSNull null], @"Bruce Cleary", [NSNull null], nil];
[tableView setEditing:YES];
// Do any additional setup after loading the view, typically from a nib.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return peopleList.count;
}
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
if([peopleList objectAtIndex:indexPath.row] == [NSNull null]) {
cell = [tableView dequeueReusableCellWithIdentifier:unmoveableCellId];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:unmoveableCellId];
cell.userInteractionEnabled = NO;
cell.contentView.backgroundColor = [UIColor grayColor];
}
} else {
cell = [tableView dequeueReusableCellWithIdentifier:moveableCellId];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:moveableCellId];
NSString * name = [peopleList objectAtIndex:indexPath.row];
cell.textLabel.text = name;
}
}
return cell;
}
- (void) tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
}
- (NSIndexPath *)tableView:(UITableView *)tableView
targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath
toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
return proposedDestinationIndexPath;
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
if([peopleList objectAtIndex:indexPath.row] == [NSNull null]) {
return NO;
}
return YES;
}
@end
Как вы представляете пробелы в массиве людей? в массиве datasource, который поддерживает эту таблицу. – danh
Это нулевые записи: [NSNull null].Когда я сталкиваюсь с пустой записью, я создаю тип «unmoveable». – LDY
После перемещения вы можете просто изменить порядок своего массива, чтобы переместить нули обратно в позиции 3, 5, 7 и т. Д.? – danh