我想在表格的两个不同页脚中显示两批文本。
第 3 部分的文本使用 titleForFooterInSection
:
- (NSString *)tableView:(UITableView *)tv titleForFooterInSection:(NSInteger)section
{
if (section == 3)
return @"SOME TEXT FOR SECTION 3";
else
return @"";
}
效果很好,样式正确。
我还想添加一些格式更复杂的文本(实际上只是左对齐),所以我创建了一个标签并将其添加到 viewForFooterInSection
,它有效但没有填充(不从 x = 20 开始) & y = 20,开始紧贴主窗口边缘)并且样式与其他文本不同。
- (UIView *)tableView:(UITableView *)tv viewForFooterInSection:(NSInteger)section
{
if (section == 1)
{
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(20, 20, 100, 50)] autorelease];
label.text = @"SOME COMPLICATED TEXT FOR SECTION 1\r\n"
"\r\n"
"MORE TEXT HERE\r\n"
"AND HERE.\r\n"
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont systemFontOfSize:14];
label.shadowColor = [UIColor colorWithWhite:0.8 alpha:0.8];
label.textColor = [UIColor blueColor];
label.lineBreakMode = UILineBreakModeWordWrap;
label.textAlignment = UITextAlignmentLeft;
label.numberOfLines = 0;
[label sizeToFit];
return label;
}
else
return nil;
}
-(CGFloat)tableView:(UITableView *)tv heightForFooterInSection:(NSInteger)section
{
if (section == 1)
return 180.0f;
else if (section == 3)
return 50.0f;
else
return 0.0f;
}
最佳答案
要获取填充,请在将标签作为页脚 View 返回之前将标签添加到另一个 View 中;
- (UIView *)tableView:(UITableView *)tv viewForFooterInSection:(NSInteger)section
{
...
CGRect footerFrame = [tv rectForFooterInSection:1];
CGRect labelFrame = CGRectMake(20, 20, footerFrame.size.width - 40, footerFrame.size.height - 40);
UIView *footer = [[UIView alloc] initWithFrame:footerFrame];
UILabel *footerLabel = [[UILabel alloc] initWithFrame:labelFrame];
[footer addSubview:footerLabel];
[footerLabel release];
...
return footer;
}
注意:您可能希望更好地限定 *footer
的范围以避免内存泄漏或使用 autorelease
。
我不确定它创建的标签的系统默认值是什么,以保存您提供的作为页脚标题的文本。我想您在创建页脚标签时需要进行试验,因为 Google 没有提供任何有用的信息。
编辑: 我没有将所有代码放在 viewForFooterInSection
方法中,而是使用自定义 UIView;
@interface CustomHeaderView : UIView {
NSString *headerTitle;
}
@property (nonatomic, retain) NSString *headerTitle;
@end
@implementation CustomHeaderView
@synthesize headerTitle;
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// create frame with padding
CGRect labelFrame = CGRectMake(8, 8, frame.size.width - 16, frame.size.height - 16);
UILabel *headerText = [[UILabel alloc] initWithFrame:labelFrame];
[headerText setNumberOfLines:0];
[headerText setFont:[UIFont boldSystemFontOfSize:14.0]];
[self addSubview:headerText];
[headerText release];
}
return self;
}
- (void)setHeaderTitle:(NSString *)title {
[title retain];
[headerTitle release];
UILabel *label = [[self subviews] objectAtIndex:0];
[label setText:title];
[label sizeToFit];
CGRect viewFrame = [self frame];
CGRect labelFrame = [label frame];
viewFrame.size.height = labelFrame.size.height + 16;
[self setFrame:viewFrame];
[self setNeedsLayout];
headerTitle = title;
}
- (void)dealloc {
[headerTitle release];
[super dealloc];
}
@end
这允许我设置我的标题文本并调整内容的标题大小。我将它延迟加载到我的 View Controller 中;
@interface MyViewController
{
UIView *headerView;
}
- (UIView *) headerView;
@end
@implementation MyViewController
- (UIView *) headerView {
if(headerView)
return headerView;
float w = [[self view] bounds].size.width;
// height irrelevant as long as non zero custom view will resize
CGRect headerFrame = CGRectMake(0, 0, w, 32);
headerView = [[CustomHeaderView alloc] initWithFrame:headerFrame];
return headerView;
}
- (UIView *) tableView:(UITableView *)tv viewForHeaderInSection:(NSInteger)sec {
return [self headerView];
}
- (void) viewWillAppear:(BOOL)animated {
[(CustomHeaderView *)[self headerView] setHeaderTitle:@"My Custom Header"]];
}
@end
关于iphone - UILabel in viewForFooterInSection 文本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5697929/