2016-02-29 3 views
0

У меня есть пользовательский класс UITableViewHeaderFooterView и xib для него. В этом xib есть метка, которая подключается к пользовательскому классу с помощью розетки. Этот пользовательский класс используется как tableHeaderView для представления таблицы в контроллере представления.tableHeaderView - layoutSubviews и initWithFrame

Я могу показать представление заголовка с требуемыми размерами, но метка в заголовке не показывает никакого значения.

Вид диспетчераDidLoad.

- (void)viewDidLoad { 
    .. 
    DashboardHeaderView* headerView = [[DashboardHeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 180) headerText:@"XYX"]; 
    self.alertsTableView.tableHeaderView = headerView; 
} 

В DashboardHeaderView, который является подклассом UITableViewHeaderFooterView.

- (id)initWithFrame:(CGRect)frame headerText:(NSString *)headerText { 
    if (self = [super initWithFrame:frame]) { 
     self.headerText = headerText; 

     NSArray* objects = [[NSBundle mainBundle] loadNibNamed:@"DashboardHeaderView" 
                owner:self 
                options:nil]; 
     UIView *nibView = [objects firstObject]; 
     UIView *contentView = self.contentView; 
     contentView.backgroundColor = [UIColor clearColor]; 
     CGSize contentViewSize = contentView.frame.size; 
     nibView.frame = CGRectMake(0, 0, contentViewSize.width, contentViewSize.height); 

     [contentView addSubview:nibView];   
    }  
    return self; 
}   

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    self.headerLabel.text = self.headerText; 
} 

Если я ставлю некоторые сообщения журнала в initWithFrame: HeaderText: и layoutSubviews, я могу видеть, что самость как указывает на разные адреса и, следовательно, в layoutSubviews, self.headerText всегда равна нулю.

layoutSubviews 
<DashboardHeaderView: 0x7ff862cf1a90; baseClass = UITableViewHeaderFooterView; frame = (0 0; 320 180); text = ''; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7ff861634e30>> 

initWithFrame 
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 320 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>> 

layoutSubviews 
<DashboardHeaderView: 0x7ff862cf1a90; baseClass = UITableViewHeaderFooterView; frame = (0 0; 290 180); text = ''; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7ff861634e30>> 

layoutSubviews 
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 290 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>> 

layoutSubviews 
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 290 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>> 

layoutSubviews 
<DashboardHeaderView: 0x7ff862cf1a90; baseClass = UITableViewHeaderFooterView; frame = (0 0; 345 180); text = ''; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7ff861634e30>> 

layoutSubviews 
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 345 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>> 

layoutSubviews 
<DashboardHeaderView: 0x7ff862cf1a90; baseClass = UITableViewHeaderFooterView; frame = (0 0; 345 180); text = ''; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7ff861634e30>> 

layoutSubviews 
<DashboardHeaderView: 0x7ff862cf05e0; baseClass = UITableViewHeaderFooterView; frame = (0 0; 345 180); text = ''; layer = <CALayer: 0x7ff8616d13f0>> 

Если вы посмотрите на этих журналах, почему у нас два разных адреса - 0x7ff862cf1a90 и 0x7ff862cf05e0.

ответ

0

UIView Class Reference говорит:

layoutSubviews - Реализуйте этот метод, если вам нужно более точное контроль над размещением ваших подобозрения чем либо ограничение или поведения обеспечивают автоматического изменения.

Вы устанавливаете значение UILabel внутри метода layoutSubviews, предназначенного только для операций изменения размера.

Я предлагаю вам переместить команду self.headerLabel.text = self.headerText в метод initWithFrame:headerText: и выполнить другие операции, такие как изменение размера или изменение ограничений в методе layoutSubviews.

Таким образом, он отлично работает! enter image description here

Смежные вопросы