删除按钮不会出现在 UITableViewCell 中
Posted
技术标签:
【中文标题】删除按钮不会出现在 UITableViewCell 中【英文标题】:Delete button doesn't appear in UITableViewCell 【发布时间】:2014-10-11 12:36:52 【问题描述】:我在单击“编辑”时获得“删除”按钮时遇到问题。问题是它根本没有出现。我的代码在下面,它适用于在单元格上滑动...在此先感谢您的帮助!
#import "ViewController.h"
@interface ViewController ()
@property (strong) NSArray *lessons;
@end
static NSString *identifier = @"Cell";
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
self.lessons = @[
@"Computer Science",
@"Math",
@"Chemistry"
];
self.tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
self.tableView.dataSource = self;
self.tableView.delegate = self;
[self.view addSubview:self.tableView];
self.navigationItem.rightBarButtonItem = self.editButtonItem;
[self.tableView registerClass:UITableViewCell.class forCellReuseIdentifier:identifier];
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return self.lessons.count;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
cell.textLabel.text = self.lessons[indexPath.row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
return YES;
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[tableView deselectRowAtIndexPath:indexPath animated:YES];
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
return UITableViewCellEditingStyleDelete;
@end
一旦我按下编辑按钮。
当我在单元格上滑动时出现。
【问题讨论】:
如何创建编辑按钮? 感谢您的评论,我已经解决了这个问题! 【参考方案1】:听到上面的代码,你会发现它真的很有用。
- (HelloController *) init
if (!(self = [super init])) return self;
self.title = @"Table Edits";
// Initialize the table titles, so they can be edited over time
tableTitles = [[NSMutableArray alloc] init];
ithTitle = NCELLS;
for (int i = 1; i <= NCELLS; i++)
[tableTitles addObject:[NSString stringWithFormat:@"Table Cell #%d", i]];
return self;
#pragma mark UITableViewDataSource Methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
- (NSInteger)tableView :(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [tableTitles count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"any-cell"];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"any-cell"] autorelease];
cell.text = [tableTitles objectAtIndex:[indexPath row]];
// cell.editingStyle = UITableViewCellEditingStyleDelete; // now read-only and no longer needed
return cell;
- (void) add
[tableTitles addObject:[NSString stringWithFormat:@"Table Cell #%d", ++ithTitle]];
[self.tableView reloadData];
#pragma mark UITableViewDelegateMethods
- (void) deselect
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
// Respond to user selection
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath
printf("User selected row %d\n", [newIndexPath row] + 1);
[self performSelector:@selector(deselect) withObject:nil afterDelay:0.5f];
-(void)leaveEditMode
// Add the edit button
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithTitle:@"Edit"
style:UIBarButtonItemStylePlain
target:self
action:@selector(enterEditMode)] autorelease];
[self.tableView endUpdates];
[self.tableView setEditing:NO animated:YES];
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath
printf("About to delete item %d\n", [indexPath row]);
[tableTitles removeObjectAtIndex:[indexPath row]];
[tableView reloadData];
-(void)enterEditMode
// Add the edit button
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithTitle:@"Done"
style:UIBarButtonItemStylePlain
target:self
action:@selector(leaveEditMode)] autorelease];
[self.tableView setEditing:YES animated:YES];
// [self.tableView beginUpdates];
- (void)loadView
[super loadView];
// Add an add button
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc]
initWithTitle:@"New"
style:UIBarButtonItemStylePlain
target:self
action:@selector(add)] autorelease];
// Add the edit button
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithTitle:@"Edit"
style:UIBarButtonItemStylePlain
target:self
action:@selector(enterEditMode)] autorelease];
【讨论】:
【参考方案2】:如果有人遇到同样的问题,那么您可能在 UIViewController
中使用了 UITableView
,因此它不会为您管理版本。点击Edit按钮时,必须手动实现TableView的编辑模式和View的编辑模式。我是如何解决这个问题的。
#pragma mark - Edit button listener
- (void)editButtonPressed
if(self.editing)
[self setEditing:NO animated:YES];
[self.tableView setEditing:NO animated:YES];
else
[self setEditing:YES animated:YES];
[self.tableView setEditing:YES animated:YES];
谢谢大家的评论!
【讨论】:
以上是关于删除按钮不会出现在 UITableViewCell 中的主要内容,如果未能解决你的问题,请参考以下文章
出现删除按钮时重新计算自定义 UITableViewCell 的高度
UIButton & UITextField 将阻止 UITableViewCell 被滑动删除
滑动删除 UITableViewCell 时,偶尔会出现红色减号删除图标