不显示UITableViewHeaderFooterView.detailTextLabel

时间:2013-01-17 13:22:32

标签: objective-c ios6 uitableview

我遇到UITableViewHeaderFooterView课程使用问题。 在我的应用中,我想同时使用textLabeldetailTextLabel属性来显示一些文字,但不会显示detailTextLabel。据我了解Apple的文档,textLabeldetailTextLabel属性应该与textLabel类的众所周知的detailTextLabelUITableViewCell属性类似。 这是我的示例类代码:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) IBOutlet UITableView *tblMain;

@end

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize tblMain;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    tblMain.delegate = self;
    tblMain.dataSource = self;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *reuseIdentifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
    }
    cell.textLabel.text = @"cell is not interesting";
    return cell;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 3;
}// Default is 1 if not implemented


- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    NSString *reuseIdentifier = @"header";
    UITableViewHeaderFooterView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:reuseIdentifier];
    if (!header) {
        header = [[UITableViewHeaderFooterView alloc] initWithReuseIdentifier:reuseIdentifier];
    }
    header.textLabel.text = @"t";
    header.detailTextLabel.text = @"dtext";
    return header;
}

@end

如果编译此代码,它将显示一个包含三个部分的表,每个部分中有一行。我以为我会在左侧获得带“t”的部分,在右侧获得“dtext”部分,但是“dtext”会被遗漏。 我的代码中的错误在哪里?查看detailTextLabel要做什么?还将赞赏指向UITableViewHeaderFooterView detailTextLabel属性的工作示例的链接。 谢谢!

2 个答案:

答案 0 :(得分:5)

如果您查看UITableViewHeaderFooterView的标题,您会发现detailTextLabel仅适用于UITableViewStyleGrouped。我猜你正在使用UITableViewStylePlain

来自UITableViewHeaderFooterView.h

@property(nonatomic, readonly, retain) UILabel* detailTextLabel; // only supported for headers in grouped style

答案 1 :(得分:1)

我认为这是框架或文档中的错误。 detailTextLabel存在,但它始终为零帧,因此始终不可见。因此它总是无用的。

最简单的解决方案是不使用内置标签;将您自己的子视图放入contentView。 (不要尝试将自己的自定义子视图与内置标签混合搭配。)