2013-10-14 33 views
0

我試圖創建一個自定義鍵盤,顯示選項列表。從xib的UITableView中沒有數據

我創建了一個只包含UITableView的xib文件(基於UIView)。

我創建了ListKeyBoardView .h和ListKeyBoardView.m(請參閱下面的代碼)。在ListKeyBoardView.m中,我加載了nib文件,並將xib中的UITableView連接到UITableView iithrough接口生成器。加載筆尖文件後,我檢查了UITableView的幀大小。它與Interface Builder中的UITableView大小相同,因此它似乎正確連接。但是,當我運行應用程序並顯示視圖時,它是完全空白的。

我已經在代碼中設置了UITableView的代理和數據源,並調用了方法tableView:numberOfRowsInSection:(返回6),但tableView:cellForRowAtIndexPath:未被調用。

要檢查其他錯誤,我在代碼中手動創建了UITableView(請參閱註釋行),然後它工作正常。我錯過了什麼?

#import "ListKeyBoardView.h" 

@interface ListKeyBoardView() <UITableViewDelegate, UITableViewDataSource> 
@property (weak, nonatomic) IBOutlet UITableView *listTableView; 
@property (strong, nonatomic) NSMutableArray *listData; 

@end 


@implementation ListKeyBoardView 

- (id)init { 
    return [self initWithFrame:CGRectMake(0, 0, 320, 250)]; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [[NSBundle mainBundle] loadNibNamed:@"ListKeyboard" owner:self options:nil]; 
//  self.listTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)]; 

     NSLog(@"Frame = %f, %f", self.listTableView.frame.size.width, self.listTableView.frame.size.height); 
     [self addSubview:self.listTableView]; 

     self.listTableView.delegate = self; 
     self.listTableView.dataSource = self; 

     [self.listTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"ListItem"]; 

     self.listData = [[NSMutableArray alloc] init]; 
     [self.listData addObject:@"een"]; 
     [self.listData addObject:@"twee"]; 
     [self.listData addObject:@"drie"]; 
     [self.listData addObject:@"vier"]; 
     [self.listData addObject:@"vijf"]; 
     [self.listData addObject:@"zes"]; 
    } 
    return self; 
} 


#pragma mark UITableViewDataSource 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self.listData count]; 
} 

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"ListItem"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 

    // Configure the cell... 
    cell.textLabel.text = [self.listData objectAtIndex:indexPath.row]; 

    return cell; 
} 
@end 

回答

0

你忘了來實現-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

做這樣的:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 
+0

numberOfSectionsInTableView:是可選的。無論如何我確實實現了它,結果是一樣的。 – Leontien

0

的這裏的問題是,的tableView在故事板創造的,因此利用initWithCoder被稱爲不initWithFrame。

要解決,請覆蓋initWithCoder而不是initWithFrame,並且不要覆蓋init方法來調用initWithFrame。