我試圖創建一個自定義鍵盤,顯示選項列表。從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
numberOfSectionsInTableView:是可選的。無論如何我確實實現了它,結果是一樣的。 – Leontien