5

我将 tableview 添加到视图控制器,然后尝试在 IOS 6.0 中更改其部分标题标题。

每次调用特定函数时我都会更改标题字符串,所以我不想处理(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

我尝试使用 (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section,但是当我放置一个断点时,我发现它没有被调用。

在.h 文件中我添加了 UITableViewDelegate,UITableViewDataSource

英寸

-(void)viewDidAppear:(BOOL)animated
{
   //tableview init
    self.meetingList=[[UITableView alloc] initWithFrame:CGRectMake(10, self.ckCal.frame.origin.y + self.ckCal.bounds.size.height+20, 384, 450) style:UITableViewStylePlain];
    [self.meetingList setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    self.meetingList.delegate=self;

    //populate mutablearray for tableview here
    [self eventsInThisMonth:[NSDate date]];

    [self.view addSubview:self.meetingList];
}
-(void)eventsInThisMonth:(NSDate *)date
{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter  setDateFormat:@"MMMM , yyyy"];
    //self.firstSectionHeader=nil;
    self.firstSectionHeader= [NSString stringWithFormat:@"Events in %@", [dateFormatter stringFromDate:date]];
    NSLog(@" self.firstSectionHeader %@ ",self.firstSectionHeader);

}
#pragma Tableview
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [self.eventHeaders count] + 1;

}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 35;
}
//set header section labels
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 35)] ;
    [headerView setBackgroundColor:[UIColor colorWithRed:106/256.0 green:106/256.0 blue:106/256.0 alpha:1.0]];
    UILabel *subjectLabel = [[UILabel alloc] initWithFrame:CGRectMake(92, 10, tableView.bounds.size.width, 20)];
    subjectLabel.textColor = [UIColor whiteColor];
    subjectLabel.font = [UIFont fontWithName:@"Gill Sans" size:20];
    subjectLabel.backgroundColor = [UIColor clearColor];
    subjectLabel.text=self.firstSectionHeader;
    NSLog(@"subjectLabel.text %@",subjectLabel.text);

    if (section==0) {

        //[headerView addSubview:subjectLabel];
        return headerView;
    }
    else
        return nil;


}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if (section==0) {
         NSLog(@"self.firstSectionHeader in titleForHeaderInSection %@",self.firstSectionHeader);
        return self.firstSectionHeader;
    }
    else
        return nil;
}

我究竟做错了什么?

4

6 回答 6

17

我认为这可能是因为您只应该使用以下两者之一:viewForHeaderInSectiontitleForHeaderInSection.

于 2013-10-08T14:09:27.333 回答
1

你不见了self.meetingList.datasource = self;

请记住,您的 viewController 必须实现 UITableViewDelegate 和 UITableViewDataSource。

YourClass : UITableView <UITableViewDelegate, UITableViewDataSource>
于 2013-10-08T14:11:57.520 回答
1

回复:我做错了什么。

我不确定您是否在 Interface Builder 中的视图控制器上设置数据源和委托。但我认为存在影响预期结果的逻辑错误。

titleForHeaderInSection:向数据源询问表视图指定节的标题标题。

同时

tableView:viewForHeaderInSection:向代理询问要在表视图的指定部分的标题中显示的视图对象。

后一种方法是覆盖为 titleForHeaderInSection 定义的行为。这样想;您有一个标题空间可以容纳标题或您创建的自定义视图以替换默认值(标题)。您通过实现第二种方法来告诉编译器使用自定义视图。要修复此注释或删除 tableView:viewForHeaderInSection: 方法或更改您的逻辑,以便更新您传递给该方法的自定义视图中的标题。此时 titleForHeaderInSection 应该被正确命中。

如果成功解决了您的初始问题,请考虑接受此答案。

于 2013-10-08T14:21:29.727 回答
0

此外,您不需要同时实现两者

(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

如果您将实施一个至少第一种方法,那么

- (NSString*)tableView:(UITableView *)tableView  titleForHeaderInSection:(NSInteger)section

不会被调用。

于 2017-08-16T12:30:04.903 回答
0

我知道这个线程有点旧,但请确保你也有:

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

tableview 在获取视图之前需要知道高度。

于 2016-11-21T15:41:18.007 回答
-1

你所要做的

self.meetingList.dataSource=self;

在 viewDidAppear 中。

于 2013-10-08T14:12:59.263 回答