2012-06-23 73 views
0

我正在嘗試爲UITableView節頭創建一個自定義UIView(.h .m & .xib)。無法識別的選擇器 - 自定義UITableView節頭

的目的是,我可以使用下面的行通過標題標題:

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

然而,這總是會引起以下錯誤:

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

它爲什麼會認爲這是一個UIView時我聲明它爲DUSettingsSectionView?這是代碼。希望有人能指出我正確的方向。

==== ==== CODE

從我的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已滿y連接到.xib中,並將.xib設置爲DUSettingsSectionView類。

+0

您展示在註釋掉的分配你的'viewForHeaderInSection:'方法...是導致錯誤的那個嗎? –

+0

是的,如果我取消註釋賦值行然後我收到以下錯誤: - [UIView sectionLabel]:無法識別的選擇器發送到實例0x6d3f6f0 2012-06-23 15:36:13.891 du [4108:207] ***終止應用程序由於未捕獲異常'NSInvalidArgumentException',原因:' - [UIView sectionLabel]:無法識別的選擇器發送到實例0x6d3f6f0' – Richard

+0

嘗試'initWithFrame:'中的NSLog(@「Nib:%@」,nibArray);'它認爲正在加載。 –

回答

0

看來你加載的.xib內DUSettingsSectionView的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; 
} 
+0

還是用initWithFrame後同樣的問題: 筆尖:( 「的UIView <:0x6d54d40;幀=(0 0; 320 16);自動調整大小= W + H;層= >」 ) 2012 -06-23 16:16:15.801 du [4545:207] - [UIView sectionLabel]:無法識別的選擇器發送到實例0x6d54d40 2012-06-23 16:16:15.802 du [4545:207] ***終止應用程序到期未捕獲的異常'NSInvalidArgumentException',原因:' - [UIView sectionLabel]:無法識別的選擇發送到實例0x6d54d40' – Richard

+0

修復: 真的很抱歉傢伙。問題純粹是由於Interface Builder。我已經建立了與「文件所有者」的關係。一旦我刪除了這些,並通過視圖重新建立了連接,所有工作。然後NIB正確加載。感謝有用的指針。 – Richard

相關問題