2

我对 iOS 很陌生,但我创建了一个带有表格视图的视图控制器,我想将其置于编辑模式。这是我的视图控制器实现文件代码:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize progsTable, programmes;

- (void)viewDidLoad
{
    [super viewDidLoad];
    programmes = [[NSMutableArray alloc] initWithObjects:@"one",@"two",@"three",nil];
    //set the title
    self.title = @"Programmes";

    //add an edit button
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

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

#pragma mark - UITableView Datasource

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

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return programmes.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

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

    cell.textLabel.text = [programmes objectAtIndex: indexPath.row];

    return cell;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *) indexPath {
    return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle==UITableViewCellEditingStyleDelete) {
        //remove from array
        [programmes removeObjectAtIndex:indexPath.row];

        //remove from table
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}
#pragma mark - UITableView Delegate methods

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

}

@end

我得到左上角的编辑按钮,但是当我点击它时,红色的删除按钮没有出现 - 我做错了什么?

4

4 回答 4

2

我认为您需要添加以下代码:

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

这告诉 UITableView 你想要哪种编辑风格。

于 2013-10-28T15:46:28.183 回答
2

运行您的确切代码确实有效 - 当我测试它时会显示删除按钮。

我认为问题在于您尚未将名为 progsTable 的@property 分配给您的表视图。

要解决它,请执行以下操作:

  • 转到您的故事板
  • 右键单击您的视图控制器
  • 在将鼠标拖动到表视图时,单击并按住名为 progsTable 的插座旁边的 +,如下所示:

在此处输入图像描述

尝试运行您的应用程序 - 现在应该会出现删除按钮。

于 2013-10-28T15:55:28.823 回答
1

用这个

- (IBAction)deleteDrug:(id)sender event:(id)event {
    selectedButtonIndex = [self indexPathForButton:sender event:event];

    [tableView setEditing:YES animated:YES];
}


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

    return NO;
}

您可能需要为您的数据源实现此方法。

- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}
于 2013-10-28T17:11:41.837 回答
0

检查您是否还在界面构建器中添加了自动布局约束,以便单元格的最末端与设备的宽度对齐。

在模拟器中的 ipad 上运行代码,如果删除按钮出现在那里但没有出现在 iphone 模拟器上,那么可能只是内容与设备的视口没有正确对齐。

我的“删除”按钮没有显示,但是当我滑动时单元格标题内容向左移动,但是我没有在故事板中设置单元格宽度的限制,只要我将右边缘约束设置为' 0'或'16',删除按钮出现。

于 2015-04-01T17:23:01.707 回答