我正在将UITableView
嵌入到子类UIViewController
中。此UITableView
使用带有图像和文本的单个动态原型,它们可以根据加载到其中的内容而变化。我遇到的问题是,UITableView
上出现的UIViewController
完全没有。{1}}。 UITableView
本身似乎没有出现。
我为子类IBOutlet
中的UITableView
创建了UIViewController
,如下所示:
@property (weak, nonatomic) IBOutlet UITableView *functionTableView;
正确链接回UITableView
。
在父viewDidLoad
的{{1}}方法中,我有以下代码:
UIViewController
我也为该类声明了委托。我正在使用的数据源目前是包含数据对象的self.functionTableView.delegate = self;
self.functionTableView.dataSource = self;
[self.functionTableView reloadData];
。我已经实施了NSMutableArray
和UITableViewDataSource
方法,如下所示:
UITableViewDelegate
#pragma mark - Table view data source delegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
NSLog(@"tableView:numberofRowsInSection %u", [[EmulatorModel sharedEmulatorModel].currentFunctionBank count]);
return [[EmulatorModel sharedEmulatorModel].currentFunctionBank count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Updating Cell %d", indexPath.row);
NSLog(@"For Function %@", [EmulatorModel sharedEmulatorModel].currentFunctionBank[indexPath.row]);
static NSString *CellIdentifier = @"FunctionCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
LivioFunction *func = nil;
if ([EmulatorModel sharedEmulatorModel].currentFunctionBank[indexPath.row] != [NSNull null]) {
func = [EmulatorModel sharedEmulatorModel].currentFunctionBank[indexPath.row];
NSLog(@"Cell Text: %@", func.label);
cell.textLabel.text = func.label;
NSLog(@"Cell Image %@", func.artwork);
cell.imageView.image = func.artwork;
} else {
cell.textLabel.text = @" ";
cell.imageView.image = [UIImage imageNamed:@"HD_fav.png"];
}
NSLog(@"cell: %@", cell);
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Table view row selected: %d", indexPath.row);
if ([EmulatorModel sharedEmulatorModel].currentFunctionBank[indexPath.row]) {
id fn = nil;
fn = ([EmulatorModel sharedEmulatorModel].currentFunctionBank)[indexPath.row];
if (fn && [fn isKindOfClass:[LivioFunction class]]) {
LivioFunction *function = (LivioFunction*)fn;
if (function.functionID == indexPath.row && function.type == LVCFunctionTypeMenu) {
[self resetButtonImages];
[self resetButtonLabels];
}
}
[LivioConnectLib sendUserSelect:indexPath.row inputType:LVCInputTypeFunction];
}
}
正在吐出正确的数据,而我在NSLog's
中使用的重新加载数据导致数据源viewDidLoad
方法被调用。因为我第一次尝试iOS UI时感到困惑和沮丧。想法?
编辑:请求lldb调试器输出到delegate
po [[UIApp keyWindow] recursiveDescription]
答案 0 :(得分:2)
从lldb调试器输出:alpha
上的UITableView
为0。
<UITableView: 0xe97d800; frame = (226 164; 276 338); clipsToBounds = YES; alpha = 0; opaque = NO; autoresize = W+H; layer = <CALayer: 0xdede2c0>; contentOffset: {0, 0}>