您的位置:首页 > 产品设计 > UI/UE

UITableViewController 编辑功能中的,添加,删除,修改

2014-07-31 11:29 381 查看
想对UITableViewController进行编辑,得加入编辑按钮,在viewDidLoad中加入下代码

self.navigationItem.rightBarButtonItem = self.editButtonItem;

self.navigationItem.rightBarButtonItem.title = GROUPMANAGER;

编辑按钮切换功能时,会调用SetEdit事件,可以重写,如下

[c-sharp] view
plaincopy

-(void) setEditing:(BOOL)editing animated:(BOOL)animated

{

[super setEditing:editing animated:animated];

self.navigationItem.leftBarButtonItem.enabled = !editing;

[self.tableView beginUpdates];

NSUInteger count = [groupArray count];

NSArray *groupInsertIndexPath = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:count inSection:0]];

// Add or remove the Add row as appropriate.

UITableViewRowAnimation animationStyle = UITableViewRowAnimationNone;

if (editing) {

self.navigationItem.rightBarButtonItem.title = DoString;

if (animated) {

animationStyle = UITableViewRowAnimationFade;

}

[self.tableView insertRowsAtIndexPaths:groupInsertIndexPath withRowAnimation:animationStyle];

}

else {

for (EntityGroup *group in modifyGroupIDArray) {

SqliteOperation *sqlOperation = [[SqliteOperation alloc] init];

[sqlOperation ModifyGroupName:group];

[sqlOperation release];

}

[modifyGroupIDArray removeAllObjects];

self.navigationItem.rightBarButtonItem.title = GROUPMANAGER;

[self.tableView deleteRowsAtIndexPaths:groupInsertIndexPath withRowAnimation:UITableViewRowAnimationFade];

}

[self.tableView endUpdates];

}

以下代理方法,设置表中,哪些行,可以进入编辑状态

// Override to support conditional editing of the table view.

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {

// Return NO if you do not want the specified item to be editable.

if (indexPath.section == 0) {

return YES;

}

else {

return NO;

}

}

以下代理方法,设置在编辑状态下,哪些行是删除功能,哪些行是添加功能

-(UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

{

if (indexPath.row == groupArray.count) {

return UITableViewCellEditingStyleInsert;

}

else {

return UITableViewCellEditingStyleDelete;

}

}

以下代理方法,表示执行删除或者添加功能

// Override to support editing the table view.

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

if (editingStyle == UITableViewCellEditingStyleDelete) {

// Delete the row from the data source

EntityGroup *group = [groupArray objectAtIndex:indexPath.row];

SqliteOperation *sqlOperation = [[SqliteOperation alloc] init];

[sqlOperation DeleteGroup:group.GroupID];

[sqlOperation release];

[(NSMutableArray*)groupArray removeObjectAtIndex:indexPath.row];

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; }

else if (editingStyle == UITableViewCellEditingStyleInsert) {

[self addGroup];

// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view

}

}

而修改功能,则需要自定义一个UITableViewCell,其中一个包括UITextField,用于编辑内容

修改内容时完成时,UITextField会执行以下代理方法,前提是将当前的UITextField的delegate设置为代理方法所在类,一般是self

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField

可以将UITextField的tag设置为表的行号,这样就根本tag找到相应的数据源,而修改数据源数据

可以直接在此保存!可以将UITextField,

因此在设置表行的代理方法中,需要这样设置

// Customize the appearance of table view cells.

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

UIImage *image;

static NSString *EditCellIdentifier =@"EditCell";

UITableViewCell *cell = nil;

cell = [tableView dequeueReusableCellWithIdentifier:EditCellIdentifier];

if ( cell== nil) {

cell = [[[NSBundle mainBundle] loadNibNamed:@"ConferencingGroupCell" owner:self options:nil] objectAtIndex:0];

}

EntityGroup *group = [groupArray objectAtIndex:indexPath.row];

//自定义cell ConferencingGroupCell

ConferencingGroupCell *editCell = (ConferencingGroupCell*)cell;

editCell.txtEdit.text = group.GroupName;

editCell.txtEdit.delegate = self;

editCell.lblDiscription.text = [NSString stringWithFormat:@"人数:%d",group.GroupNmuber];

editCell.txtEdit.tag = indexPath.row;

editCell.delegate = self;

editCell.accessoryType = group.isSelected ? UITableViewCellAccessoryCheckmark:UITableViewCellAccessoryNone;

return cell;

}

在自定义的cell中需要写如下代码,来达到完成编辑时的操作

//表示在编辑或者非编辑状态下,设置UITextField是否可用

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

// The user can only edit the text field when in editing mode.

[super setEditing:editing animated:animated];

txtEdit.enabled = editing;

}

//表示在编辑状态下,出现删除按钮时的代理方法

- (void)willTransitionToState:(UITableViewCellStateMask)state {

[super willTransitionToState:state];

if (state & UITableViewCellStateEditingMask) {

lblDiscription.hidden = YES;

btnDetail.hidden = YES;

}

}

//表示编辑状态下,删除按钮消失时的代理方法

- (void)didTransitionToState:(UITableViewCellStateMask)state {

[super didTransitionToState:state];

if (!(state & UITableViewCellStateEditingMask)) {

lblDiscription.hidden = NO;

btnDetail.hidden = NO;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐