我的代码中有一个简单的关键问题。
在我的Tableview上按下我的编辑按钮(位于导航栏上)时,我需要编辑UITableview的方法。我想隐藏My Cell上的按钮和标签。
代码:
我正在添加我的按钮..
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *currentCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
currentCell = nil;
if (currentCell==nil)
{
currentCell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
BtnEmail=[UIButton buttonWithType:UIButtonTypeCustom];
//BtnEmail = (UIButton *)[currentCell viewWithTag: 3];
BtnEmail.frame=CGRectMake(265, 17, 25, 25);
BtnEmail.tag=indexPath.row;
//[BtnEmail setTitle:@"E-mail" forState:UIControlStateNormal];
[BtnEmail setBackgroundImage:[UIImage imageNamed:@"email.png"] forState:UIControlStateNormal];
[BtnEmail addTarget:self action:@selector(BtnEmail:) forControlEvents:UIControlEventTouchUpInside];
[currentCell.contentView addSubview:BtnEmail];
[currentCell.contentView bringSubviewToFront:BtnEmail];
return currentCell;
}
我的编辑按钮声明为
编辑按钮:
self.navigationItem.rightBarButtonItem = self.editButtonItem;
在编辑时单击我的此方法将调用。
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];
[listTableView setEditing:editing animated:animated];
if(editing)
{
self.navigationItem.leftBarButtonItem.enabled = NO;
//BtnEmail.frame=CGRectMake(355, 17, 25, 25);
BtnEmail.hidden = TRUE;
}
else
{
self.navigationItem.leftBarButtonItem.enabled = YES;
//BtnEmail.frame=CGRectMake(265, 17, 25, 25);
BtnEmail.hidden = FALSE;
}
[super setEditing:editing animated:animated];
}
在这种情况下,我的最后一个单元格按钮和Lable将隐藏不是全部。我需要隐藏我的Cell的所有UIButton。
如果我在桌面上有3个单元格,那么它只会隐藏最后一个按钮 ..
谢谢。
答案 0 :(得分:3)
您只需在cellForRow
中进行条件检查即可,并在编辑更改时重新加载表格视图。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Do your other stuff
// Add this conditional check
if (tableView.editing)
{
BtnEmail.hidden = YES;
}
else
{
BtnEmail.hidden = NO;
}
[currentCell.contentView addSubview:BtnEmail];
[currentCell.contentView bringSubviewToFront:BtnEmail];
return currentCell;
}
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];
[listTableView setEditing:editing animated:animated];
// Reload the table view
[listTableView reloadData];
// Do your other stuff
}
但是使用自定义单元格可以轻松创建该按钮。在这里,您一次又一次地添加按钮。否则,将创建代码的按钮移动到if(cell == nil)
块
答案 1 :(得分:0)
那是因为你宣布
BtnEmail.hidden = FALSE;
在这种情况下是cellForRowAtIndexPath
方法中最后分配的按钮。尝试这样的事情:
if(editing)
{
self.navigationItem.leftBarButtonItem.enabled = NO;
//BtnEmail.frame=CGRectMake(355, 17, 25, 25);
For(int i=0; i< [tableArray count]; i++)
{
UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]] ;
UIButton *btn=(UIButton *)[cell viewWithTag:i];
btn.hidden = TRUE;
}
}
else
{
self.navigationItem.leftBarButtonItem.enabled = YES;
//BtnEmail.frame=CGRectMake(265, 17, 25, 25);
For(int i=0; i< [tableArray count]; i++)
{
UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]] ;
UIButton *btn=(UIButton *)[cell viewWithTag:i];
btn.hidden = FALSE;
}
}