0

UITableView セクション ヘッダーのカスタム UIView (.h .m & .xib) を作成しようとしています。

目的は、次の行を使用して見出しのタイトルを渡すことができるようにすることです。

sectionHeaderView.sectionLabel.text = @"SOME TEXT";

ただし、これにより常に次のエラーが発生します。

[UIView sectionLabel]: unrecognized selector sent to instance 0x6d3f6f0

DUSettingsSectionView として宣言すると、これが UIView であると見なされるのはなぜですか? これがコードです。うまくいけば、誰かが私を正しい方向に向けることができます。

==== コード ====

私のUIViewControllerから

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 16;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
DUSettingsSectionView *sectionHeaderView = [[DUSettingsSectionView alloc] init];
//    sectionHeaderView.sectionLabel.text = @"SOME TEXT";
return sectionHeaderView;
}

DUSettingsSectionView.h から

#import <UIKit/UIKit.h>
@interface DUSettingsSectionView : UIView {
    UILabel *sectionLabel;
}
@property (nonatomic, strong) IBOutlet UILabel *sectionLabel;
@end

DUSettingsSectionView.m から

#import "DUSettingsSectionView.h"
@implementation DUSettingsSectionView
@synthesize sectionLabel;
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
    NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"DUSettingsSectionView" owner:self options:nil];
    self = [nibArray objectAtIndex:0];
}
return self;
}
@end

sectionLabel は .xib 内で完全に接続され、.xib は DUSettingsSectionView クラスに設定されます。

4

1 に答える 1

0

DUSettingsSectionView のメソッド内で .xib をロードしているようですが、内部でinitWithFrame:呼び出しています。 これを修正するには、次のように変更します。init(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
  DUSettingsSectionView *sectionHeaderView = [[DUSettingsSectionView alloc] initWithFrame:frame];
  sectionHeaderView.sectionLabel.text = @"SOME TEXT";
  return sectionHeaderView;
}
于 2012-06-23T12:06:44.150 に答える