无法在UITableView中删除单元格

时间:2014-05-27 16:06:23

标签: ios objective-c uitableview

我正在使用Xcode 5.1.1。

为iPhone创建单一视图应用。我在Xcode iOS模拟器中测试,一切正常,直到我尝试删除。多次检查代码。在应用程序“编辑” - >红色“减号”出现在每一行然后我按下“减号”并出现红色“删除”按钮,无法按下。

#import "ViewController.h"
#import "AddViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize data;

- (void)viewDidLoad
{
    [super viewDidLoad];

    data = [[NSMutableArray alloc] initWithObjects: @"item1", @"item2", @"item3", nil];
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

#pragma mark - Table view data source


-(NSInteger) numberOfSectionsInTableView: (UITableView *) tableView {
    return 1;
}


-(NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection:(NSInteger)section {
    return [data count];
}


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

    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    [[cell textLabel] setText:[data objectAtIndex:[indexPath row]]];

    return cell;
}

// Called after 'Save' is tapped on the AddViewController
- (IBAction) unwindToTableViewController: (UIStoryboardSegue *) sender {

    AddViewController *addViewController = (AddViewController *) [sender sourceViewController];
    NSString *text = [[addViewController textField] text];

    if(![text length] == 0 && ![[text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] == 0) {

        // add it to the tap of the data source
        [data insertObject:text atIndex:0];
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

        // insert it into tableView
        [[self tableView] beginUpdates];
        [[self tableView] insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
        [[self tableView] endUpdates];
    }
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [[self tableView] setEditing:editing animated:animated];
}

- (void)tableView:(UITableView *)tableView comitEditingStyle: (UITableViewCellEditingStyle) editingStyle forRowAtIndexPath: (NSIndexPath *) indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [data removeObjectAtIndex:[indexPath row]];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

@end

5 个答案:

答案 0 :(得分:0)

您处理删除,但似乎没有启用它:

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

答案 1 :(得分:0)

听起来你在删除事件后没有重新加载数据。

点击删除按钮后,从数据源中删除数据后,请致电

[self.tableView reloadData];

看看是否有效。

答案 2 :(得分:0)

您在方法名称中将commit误解为comit。不确定这是否是 问题,但肯定是 问题。它应该是

- (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle) editingStyle forRowAtIndexPath: (NSIndexPath *) indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [data removeObjectAtIndex:[indexPath row]];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

答案 3 :(得分:0)

这与您设置自动调整屏幕的方式有关 - 它是在iOS 7上呈现的奇怪行为。尝试在viewDidLoad函数中调用它 - [self view].autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight这对于您的tableView - {{ 1}}。我在应用程序中遇到了同样的问题并修复了它。

答案 4 :(得分:0)

- (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle) editingStyle forRowAtIndexPath: (NSIndexPath *) indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [data removeObjectAtIndex:[indexPath row]];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
[self.tableView reloadData];}