在UITableView的编辑模式下移动标题

时间:2010-11-23 00:28:44

标签: ios objective-c uitableview cocoa-touch

我有一个带有自定义单元格的UITableView,还有一个自定义标题,如下所示:

--------------------
|   Header         |
--------------------
|     cell         |
|     cell         |
|     etc          |

每当我将其置于编辑模式时,为了删除单元格,它看起来像这样

--------------------
|   Header         |
--------------------
-  |     cell        
-  |     cell        
-  |     etc      

正如您所看到的,表格单元格向右移动,为减号图标腾出空间。但是,标题保持在相同的位置。如何将标题移到右侧,以匹配下面的单元格x-postion?

3 个答案:

答案 0 :(得分:0)

您可以在标题中添加标签 - (UIView *)tableView:(UITableView *)tv viewForHeaderInSection:(NSInteger)部分如下:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, self.tableView.bounds.size.width - 45,50)];

    label.font = [UIFont systemFontOfSize:14];
    label.backgroundColor = [UIColor greenColor];
    if(self.tableView.editing && section==0)
    {
       label.frame = CGRectMake(0,0,self.tableView.bounds.size.width,150);
        NSString *NewSection = @"My new header message in edit mode d\n\n OK";
        label.text = NewSection;
    }
    else   {
      label.frame = CGRectMake(0,0,self.tableView.bounds.size.width,40);  
    label.text = [self tableView:tableView titleForHeaderInSection:section];
       }

[sectionHeader addSubview:label]; 然后将其添加到标题视图

希望它对你有所帮助。

答案 1 :(得分:0)

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView* viewObj = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 40]; 

UILabel *headerLabel = [[UILabel alloc] init];

headerLabel.font = [UIFont systemFontOfSize:14];
headerLabel.backgroundColor = [UIColor greenColor];
if(self.tableView.editing && section==0)
{
   headerLabel.frame = CGRectMake(cellpositionX,0,self.tableView.bounds.size.width - cellpositionX,40);
    NSString *NewSection = @"My new header message in edit mode d\n\n OK";
    headerLabel.text = NewSection;
}
else   {
  headerLabel.frame = CGRectMake(0,0,self.tableView.bounds.size.width,40);  
headerLabel.text = [self tableView:tableView titleForHeaderInSection:section];
   }
[viewObj addSubview:headerLabel];
return viewObj;}

在上面的代码中,您可以传递cellpositionX中的x值。

每次TableView启动和结束编辑时。你需要重新加载TableView

我希望这能解决你的问题

答案 2 :(得分:-1)

为编辑模式标题创建了一个不同的笔尖,然后仅在编辑时显示:

-(UIView *)tableView:(UITableView *)tv viewForHeaderInSection:(NSInteger)section {
// CustomHeader creates the header view
CustomHeader *tableHeader;  
if (self.tableView.editing) 
{
    tableHeader = (CustomHeader *)[CustomHeader headerFromNibNamed:@"CustomHeaderEditMode"];        
} else {
    tableHeader = (CustomHeader *)[CustomHeader headerFromNibNamed:@"CustomHeader"];
}
return tableHeader;
}