我遇到UITableViewHeaderFooterView
课程使用问题。
在我的应用中,我想同时使用textLabel
和detailTextLabel
属性来显示一些文字,但不会显示detailTextLabel
。据我了解Apple的文档,textLabel
和detailTextLabel
属性应该与textLabel
类的众所周知的detailTextLabel
和UITableViewCell
属性类似。
这是我的示例类代码:
#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
属性的工作示例的链接。
谢谢!
答案 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
。 (不要尝试将自己的自定义子视图与内置标签混合搭配。)