我有一个包含序列号1,2 ...,n的NSMutableArray,并且有一个UITableView,它按顺序显示垂直上升的单元格。我如何在视觉上和数据中以及NSMutableArray中删除1和n之间的行,然后将数据中删除的单元格后面的所有单元格的值减1并在视觉上减1 firstResponder不会像reloadData方法调用那样辞职控制吗?
@interface TableController : UIViewController
@property (nonatomic, retain) NSMutableArray *data;
@end
@implementation TableController
@synthesize data;
- (id)init
{
if(self = [super init]) {
data = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
}
return self;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [data count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [UITableViewCell new];
[cell.textLabel setText:[data objectAtRow:indexPath.row]];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 20;
}
@end
我如何删除第3行,然后将第4行和第5行分别变为3和4?
答案 0 :(得分:1)
只需编辑视图模型,然后重新加载表格。
[data removeObjectAtIndex:2];
[tableView reloadData];
另一个选项是UITableView
方法deleteRowsAtIndexPaths:withRowAnimation:
。此方法仅 UI ,您还必须更新视图模型,以防以后再次加载单元格。此方法的优点是只有您指定的单元格才会更改。现有单元格未重新加载。
如果您要删除的单元格是您的第一响应者,那么您可以通过告知下一个单元格成为第一响应者来处理此情况。
答案 1 :(得分:0)
对于用户驱动的删除,您的[tableview dataSource]
应实施方法tableView:commitEditingStyle:forRowAtIndexPath:
。
这是我的代码中的实现......
-(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(editingStyle == UITableViewCellEditingStyleDelete)
{
[[STLocationsModel sharedModel] deleteLocationAtIndex: [indexPath row]];
[tableView deleteRowsAtIndexPaths: @[indexPath] withRowAnimation: UITableViewRowAnimationLeft];
}
}
要允许编辑,您还需要...
-(BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
要使表格进入编辑模式以允许删除,您需要将其置于编辑模式。您可以将其放在viewDidLoad
中,也可以使用按钮切换它:
[[self tableView] setEditing:YES animated:NO];
如果您还希望能够在编辑表格时进行选择(同样,这可以放在您的viewDidLoad
...
[[self tableView] setAllowsSelectionDuringEditing: YES];