TableView - 自定义节中的标题

时间:2013-11-26 13:37:05

标签: ios objective-c uitableview storyboard

我想在分组的tableview中自定义标题。

我知道我可以通过做类似以下的事情来做到这一点:

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

    //configure the UIView

    return sectionHeaderView;
}

我是iOS开发的新手,到目前为止,我只是通过将我想要使用的元素拖放到我的视图中,在storyboad中配置了自定义视图。

因此我的问题是:是否可以在故​​事板中自定义标题视图的外观?

我想在某些标题中添加按钮,例如。请记住,我想为每个部分使用不同的标题。

4 个答案:

答案 0 :(得分:2)

就像Mr_bem说的那样,您可以使用XIB文件来执行此操作,请注意尽管loadNibNamed方法返回NSArray,但您的视图应该是第一个,我很容易实现它:

heres a shot of a tableview using a XIB header

确保包含代码,32.f高度来自我创建的自由格式XIB的大小:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 32.f;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    NSArray *headerViewArray = [[NSBundle mainBundle] loadNibNamed:@"headerView" owner:self options:nil];
    UIView *headerView = [headerViewArray objectAtIndex:0];

    return headerView;
}

这就是XIB的样子 - > header XIB

答案 1 :(得分:1)

您可以,只需创建一个XIB文件,然后在那里自定义视图,然后像这样加载视图:

MyCustomView* nibView =  [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil][0];

然后在你的委托函数(Y)中返回它:)

答案 2 :(得分:0)

您可以使用UIView方法将UI元素添加到addSubView:

这样的事情:

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

    //configure the UIView

    // Initialize an UIButton
    UIButton *someButton = [[UIButton alloc] init];

    // Give it a title
    someButton.titleLabel.text = @"Touch me :3";

    // Add the button to the headerView
    [sectionHeaderView addSubView:someButton];

    return sectionHeaderView;
}

如果您想要将不同的UIView用于不同的部分,请使用if函数:

    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
    // If this is the first section (0 section)
    if (section == 0) {
        UIView *sectionHeaderView = [[UIView alloc] initWithFrame:
                           CGRectMake(0, 0, tableView.frame.size.width, 50.0)];

        //configure the UIView

        // Initialize an UIButton
        UIButton *someButton = [[UIButton alloc] init];

        // Give it a title
        someButton.titleLabel.text = @"Touch me On section One :3";

        // Add the button to the headerView
        [sectionHeaderView addSubView:someButton];

        return sectionHeaderView;
    }

    // If this is the second section (1 section)
    if (section == 1) {
        UIView *sectionHeaderView = [[UIView alloc] initWithFrame:
                           CGRectMake(0, 0, tableView.frame.size.width, 50.0)];

        //configure the UIView

        // Initialize an UIButton
        UIButton *someButton = [[UIButton alloc] init];

        // Give it a title
        someButton.titleLabel.text = @"Touch me On sectio Two :3";

        // Add the button to the headerView
        [sectionHeaderView addSubView:someButton];

        return sectionHeaderView;
    }
    }
祝你好运。

答案 3 :(得分:0)

您可以使用原型单元格通过故事板进行操作,然后对要添加到其中的任何UIButtons,UILabels等使用标记。

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
   UITableViewCell *cell= [tableView dequeueReusableCellWithIdentifier:@"HEADER_CELL"];

   // Stuff you want to do to your header
   // Tag can be anything except 0. You set this in the interface builder
   UILabel * myHeaderLabel = (UILabel *)[cell viewWithTag:1];
   UIButton * myHeaderButton = (UIButton*)[cell viewWithTag:2];

   myHeaderLabel.text = [NSString stringWithFormat:@"Section: %d", section];

   myHeaderButton.title = @"Button Title";
   // headerButtonClicked is a function you want the button to do
   [myHeaderButton addTarget:self action:@selector(headerButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

   return cell; 
}

创建单击按钮时的功能

-(void)viewActivityMoreInfo:(id)sender 
{
   UIButton *btnClicked = (UIButton *) sender;
   // do something here
}