首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有关编辑UITableView的问题

有关编辑UITableView的问题
EN

Stack Overflow用户
提问于 2014-02-21 08:45:17
回答 1查看 89关注 0票数 0

我有一个具有编辑功能的UITableView。问题是,每当我删除或重新排列时,单元格不会重新排列,唯一被删除的单元格是表中最后一个单元格。奇怪的是,这以前没有发生过,但它确实发生了。这是我使用的代码-

代码语言:javascript
复制
self.periodArray = [[NSMutableArray alloc] initWithObjects:@"Period 1", @"Period 2", @"Period 3", @"Period 4", @"Period 5", @"Period 6", nil];

    self.classTableView = [[UITableView alloc] initWithFrame: CGRectMake(0, 0, 320, 44*[self.periodArray count]+63) style:UITableViewStylePlain];
    self.classTableView.delegate = self;
    self.classTableView.dataSource = self;
    self.classTableView.scrollEnabled = NO;
    [self.classTableView setSeparatorInset:UIEdgeInsetsMake(0, 34, 0, 0)];
    [self.view addSubview:self.classTableView];

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {

    return [self.periodArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    self.cell = nil;
    static NSString *AutoCompleteRowIdentifier = @"AutoCompleteRowIdentifier";
    self.cell = [tableView dequeueReusableCellWithIdentifier:AutoCompleteRowIdentifier];
    if (self.cell == nil) {
        self.cell = [[SchoolCell alloc]
                initWithStyle:UITableViewCellStyleDefault reuseIdentifier:AutoCompleteRowIdentifier];
    }
    self.cell.selectionStyle = UITableViewCellSelectionStyleNone;


    NSString *rowString = [NSString stringWithFormat:@"%d.", (int)indexPath.row + 1];
    self.cell.rowNumber = rowString;
    self.cell.classText.delegate = self;
    self.cell.teacherText.delegate = self;
    self.cell.delegate = self;

    return self.cell;
}

#pragma mark UITableViewDelegate methods

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


}

-(void)showNext:(UIButton *)sender {

    if (self.navigationItem.rightBarButtonItem.tintColor == [UIColor redColor]) {
        SelectClubsViewController *selectClubsViewController = [[SelectClubsViewController alloc] init];
        [self.navigationController pushViewController:selectClubsViewController animated:YES];
    }
}

-(void)editSelected:(UIButton *)sender {

    self.editClassesButton.hidden = YES;
    self.editLabel.hidden = YES;

    self.addClassButton.hidden = NO;
    self.addLabel.hidden = NO;

    self.editDoneButton.hidden = NO;
    self.editDoneLabel.hidden = NO;

    [self.classTableView setEditing: YES animated: YES];

}

-(void)doneSelected:(UIButton *)sender {

    self.editClassesButton.hidden = NO;
    self.editLabel.hidden = NO;

    self.addClassButton.hidden = YES;
    self.addLabel.hidden = YES;

    self.editDoneButton.hidden = YES;
    self.editDoneLabel.hidden = YES;

    [self.classTableView setEditing: NO animated: YES];

}

-(void)addSelected:(UIButton *)sender {

    [self.periodArray addObject:@"Period 8"];
    [self.classTableView reloadData];
    self.classTableView.frame = CGRectMake(0, 0, 320, 44*[self.periodArray count]+63);

    self.theLine.frame = CGRectMake(0, (self.classTableView.frame.size.height), 320, .5);
    self.addClassButton.frame = CGRectMake(0, self.classTableView.frame.size.height, 320, 44);
    self.addLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + 5), 100, 30);
    self.editLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + 5), 100, 30);
    self.editClassesButton.frame = CGRectMake(0, self.classTableView.frame.size.height, 320, 44);
    self.editDoneButton.frame = CGRectMake(0, (self.classTableView.frame.size.height + self.addClassButton.frame.size.height)-2, 320, 44);
    self.editDoneLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + self.addClassButton.frame.size.height + 5), 150, 30);

}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}


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


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


- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
    [self.classTableView reloadData];
}


- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{

    self.addClassButton.frame = CGRectMake(0, self.classTableView.frame.size.height - 2, 320, 44);
    self.addLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + 3), 100, 30);
    self.editDoneButton.frame = CGRectMake(0, (self.classTableView.frame.size.height + self.addClassButton.frame.size.height)- 2, 320, 44);
    self.editDoneLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + self.addClassButton.frame.size.height + 3), 150, 30);
    [self.classTableView reloadData];

}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    [self.periodArray removeObjectAtIndex:indexPath.row];
    //[tableView reloadData];
    self.classTableView.frame = CGRectMake(0, 0, 320, 44*[self.periodArray count]+63);

    self.theLine.frame = CGRectMake(0, (self.classTableView.frame.size.height), 320, .5);
    self.addClassButton.frame = CGRectMake(0, self.classTableView.frame.size.height, 320, 44);
    self.editLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + 5), 100, 30);
    self.addLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + 5), 100, 30);
    self.editClassesButton.frame = CGRectMake(0, self.classTableView.frame.size.height, 320, 44);
    self.editDoneButton.frame = CGRectMake(0, (self.classTableView.frame.size.height + self.addClassButton.frame.size.height)-2, 320, 44);
    self.editDoneLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + self.addClassButton.frame.size.height + 5), 150, 30);
}

要添加节,请执行以下操作:

代码语言:javascript
复制
-(void)addSelected:(UIButton *)sender {

    [self.periodArray addObject:@"Period 8"];
    [self.classTableView reloadData];
    self.classTableView.frame = CGRectMake(0, 0, 320, 44*[self.periodArray count]+63);

    self.theLine.frame = CGRectMake(0, (self.classTableView.frame.size.height), 320, .5);
    self.addClassButton.frame = CGRectMake(0, self.classTableView.frame.size.height, 320, 44);
    self.addLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + 5), 100, 30);
    self.editLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + 5), 100, 30);
    self.editClassesButton.frame = CGRectMake(0, self.classTableView.frame.size.height, 320, 44);
    self.editDoneButton.frame = CGRectMake(0, (self.classTableView.frame.size.height + self.addClassButton.frame.size.height)-2, 320, 44);
    self.editDoneLabel.frame = CGRectMake(10, (self.classTableView.frame.size.height + self.addClassButton.frame.size.height + 5), 150, 30);

}

在单元格内部:

代码语言:javascript
复制
    self.classText = [[UITextField alloc] init];
    self.classText.delegate = self;
    self.classText.placeholder = @"Class";
    self.classText.frame = CGRectMake(145, 6, 160, 30);
    self.classText.keyboardAppearance = UIKeyboardAppearanceDark;
    self.classText.font = [UIFont fontWithName:@"HelveticaNeue" size:17];
    [self.classText addTarget:self action:@selector(textViewDidChange:) forControlEvents:UIControlEventEditingChanged];
    [self.contentView addSubview:self.classText];
EN

Stack Overflow用户

发布于 2014-02-21 10:30:25

您需要从数据源(periodArray)中删除项,并从tableView中删除行:

代码语言:javascript
复制
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    // Remove from the dataSource
    [self.periodArray removeObjectAtIndex: indexPath.row];

    // Remove from the tableView
    [self.classTableView deleteRowsAtIndexPaths: @[ indexPath ] withRowAnimation: UITableViewRowAnimationAutomatic];

    ...
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21922901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档