スポットを占める人のリストがあります。ユーザーがこれらの人々を別の場所に再配置できるようにしたいのですが、一部の場所は立ち入り禁止です。これは、UITableViewの再配置機能を使用して最も簡単に実現できると思いました。しかし、利用できない場所を静止させておく方法がわかりません。
たとえば、ActiviaBoulangerをスポット5に移動したいとします。灰色のセルは動かせないセルである必要があります。
最初のビュー:
UITableViewが自動的に行うこと:
UITableViewに実行させたいこと:
設定tableView:canMoveRowAtIndexPath:
すると、セルを移動できなくなるだけのように見えますが、他のセルの動きに反応してセルが移動するのを防ぐことはできません。
どんな助けでも大歓迎です。ありがとう
更新:以下は、問題のセットアップを含むサンプルコードです。それらはすべて失敗し、物事を混乱させるため、私は解決策への私の努力を含めませんでした。
#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