在UITableView中获取Section的标题

时间:2012-07-11 09:22:24

标签: iphone ios ipad uitableview

我在TableView中设置了所有标题的部分。

稍后,我需要在任何部分的tableview中获取标题的值,

我如何直接向UITableView询问这些值?

没有委托协议:

    [self tableView:tableView titleForHeaderInSection:i]

因为此方法会覆盖我自己的类的协议。

- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
 {
     /* If datasource methdod is implemented, get´s the name of sections*/
     SEL nameForSection = @selector(nameForSection:);
    if ( (self.dataSource) && [self.dataSource respondsToSelector:nameForSection] )
    {
       NSString *titleSection = [self.dataSource nameForSection:section];
       return titleSection;
   }

return nil;

}

谢谢提前......

6 个答案:

答案 0 :(得分:7)

从iOS6.0及更高版本开始支持

如果你有indexPath:

,你可以这样做
UITableViewHeaderFooterView* header =[self.tableView headerViewForSection:indexPath.section];
NSLog(@"Header text = %@", header.textLabel.text);

像这样改变

header.textLabel.text= @"changed";

答案 1 :(得分:4)

您可以使用UITableView的dataSource来获取章节标题:

[tableView.dataSource tableView:tableView titleForHeaderInSection:section];

如果您正在使用默认的dataSource(即UITableViewController),它将返回InterfaceBuilder中设置的节标题。

这是我的代码,它复制模板视图并适当地设置标题。请注意,我只是使用表的标题视图作为存储我的模板的方便位置,并在我的UITableViewController子类中的viewDidLoad上删除它。

- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView* header = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:self.sectionHeaderTemplateView]];
    UILabel* label = ((UILabel*)header.subviews[0]);
    label.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section];
    return header;
} 

答案 2 :(得分:2)

将sections标题存储在NSArray中,并使用此数组获取表视图中任何部分的值。

答案 3 :(得分:2)

你是如何设置部分的标题的? 如果要覆盖UITableViewDataSource中的tableView:titleForHeaderInSection:方法,则可以自己调用它来获取特定部分的标题。 如果要覆盖UITableViewDataSource中的tableView:viewForHeaderInSection:方法,请考虑使用包含所有标签的数组,以便获得特定部分的标签标题。

答案 4 :(得分:1)

此表视图方法将返回标题的视图,我认为在您的情况下它应该是UILabel

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

答案 5 :(得分:0)

- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
 {
     /* If datasource methdod is implemented, get´s the name of sections*/
     SEL nameForSection = @selector(nameForSection:);
    if ( (self.dataSource) && [self.dataSource respondsToSelector:nameForSection] )
    {
       NSString *titleSection = [self.dataSource nameForSection:section];
       return titleSection;
   }

return nil;

嗯...您的DataSource有一个DataSource? UITableView的dataSource的目标是由其他类实现,因此self.datasource不是UITableView的数据源!