我有一个包含许多单元格的表格视图。每个单元格都有自己的UITextField。我以编程方式添加了文本字段。我希望在点击编辑按钮时显示每个textField。 (现在表处于编辑模式),再次按下时,我希望所有textField都消失(离开编辑模式)。我知道我可以使用hidden
属性完成此操作,但我尝试在此方法中执行此操作:
- (IBAction)editButton:(id)sender
{
if (self.editing)
{
[self setEditing:NO animated:YES];
[self.myTableView setEditing:NO animated:YES];
EditButton.title = @"Edit";
cellText.hidden = YES; //<-- THIS IS THE CODE
}
else
{
[self setEditing:YES animated:YES];
[self.myTableView setEditing:YES animated:YES];
EditButton.title = @"Done";
cellText.hidden = NO; //<-- THIS IS THE CODE
}
}
但它只显示和隐藏非常最后一个单元格的textField。我怎样才能将它显示在它显示的位置,然后不显示每个单元格的textFIeld?非常感谢提前!!!
CELL FOR ROW
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cellText = [[UITextField alloc]init];
[cellText setFrame:CGRectMake(190, 15, 55, 30)];
cellText.text = @"1";
cellText.borderStyle = UITextBorderStyleRoundedRect;
cellText.hidden = YES;
cellText.userInteractionEnabled = NO;
[cell addSubview:cellText];
}
return cell;
}
提前致谢!! :d
答案 0 :(得分:1)
虽然您为每个单元格创建了一个文本字段,但您只能引用名为cellText
的ivar中的最后一个单元格。这就是你显示/隐藏唯一文本字段的原因。
我建议您在切换编辑模式时重新加载表格,并在tableView:cellForRowAtIndexPath:
中设置文本字段的可见性。
哦,你应该在将其作为子视图添加后释放cellText
。否则你是在泄漏记忆。强烈建议您将子视图添加到UITableViewCell
内容视图,而不是直接添加到单元格。
答案 1 :(得分:1)
你可以摆脱这个问题,使用这个技巧,我不确定它是否会在你的代码中创建内存泄漏。因为它每次都会创建新的单元格。但是如果你不知道你肯定可以使用它做一些正确的方法。 ;)
- (IBAction)editButton:(id)sender
{
if (self.editing)
{
[self setEditing:NO animated:YES];
[self.myTableView setEditing:NO animated:YES];
EditButton.title = @"Edit";
}
else
{
[self setEditing:YES animated:YES];
[self.myTableView setEditing:YES animated:YES];
EditButton.title = @"Done";
}
[self.myTableView reloadData];
}
重新加载TableView后,检查cellForRowAtIndexPath中的条件,将self.editing的值传递给TextField,使其隐藏/显示。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cellText = [[UITextField alloc]init];
[cellText setFrame:CGRectMake(190, 15, 55, 30)];
cellText.text = @"1";
cellText.borderStyle = UITextBorderStyleRoundedRect;
cellText.hidden = YES;
cellText.backgroundColor = [UIColor redColor];
cellText.userInteractionEnabled = NO;
[cell addSubview:cellText];
cellText.hidden=!self.editing;
return cell;
}
答案 2 :(得分:1)
试试此代码
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (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] autorelease];
}
UITextField * cellText = [[UITextField alloc] initWithFrame:CGRectMake(1, 1, 100, 30)];
cellText.tag = 1;
cellText.textColor = [UIColor darkTextColor];
//cellText.numberOfLines = 0;
cellText.font = [ UIFont fontWithName: @"Helvetica-Bold" size: 12.0 ] ;
cellText.backgroundColor = [ UIColor clearColor ] ;
cellText.text = @"123";
cellText.hidden = YES;
[cell.contentView addSubview:cellText];
[cellText release];
cellText =nil;
// Set up the cell...
return cell;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
// Detemine if it's in editing mode
UITextField *cellText = (UITextField *)[[aTableView cellForRowAtIndexPath:indexPath] viewWithTag:1];
if (!self.editing)
{
[self setEditing:NO animated:YES];
[self.tableView setEditing:NO animated:YES];
// EditButton.title = @"Edit";
cellText.hidden = YES; //<-- THIS IS THE CODE
}
else
{
[self setEditing:YES animated:YES];
[self.tableView setEditing:YES animated:YES];
// EditButton.title = @"Done";
cellText.hidden = NO; //<-- THIS IS THE CODE
}
return UITableViewCellEditingStyleNone;
}
嗨朋友这个代码对我来说很好,相信你也有一个感恩节
答案 3 :(得分:0)
这实际上是正常的。根据addSubview下的Apple文档:
视图只能有一个超级视图。如果视图已经有超视图和 该视图不是接收者,此方法删除了以前的 在使接收器成为新的超级视图之前的超视图。
所以它会继续删除它从单元格中添加和删除直到它到达最后一个。