我有一个非常奇怪的问题,我有一种感觉,这将是一个奇怪的解决方案,就像我有错误的配置文件(检查过!)。
我可以在模拟器和我的iPhone 5上运行,我有一个UITableView填充了一些单元格,都很好玩。
但是,我只是在我的5S上运行它,表格视图完全是空白的。细胞不可选择或任何东西。我已经检查过TableView没有被发布或任何东西,如果我下拉刷新它会响应。我甚至可以看到我的日志记录说,如果我进行刷新,则会再次调用numberOfRows ...和cellForRow ..方法,而根本没有显示任何UI!
以下是各种片段,如果有帮助的话:
- (void)viewDidLoad
{
...
UINib *cellNib = [UINib nibWithNibName:@"EJCMatchInboxCell" bundle:nil];
[self.matchTable registerNib:cellNib forCellReuseIdentifier:kEJCMatchInboxCellIdent];
UINib *segmentedCellNib = [UINib nibWithNibName:@"EJCSegmentedControlCell" bundle:nil];
[self.matchTable registerNib:segmentedCellNib forCellReuseIdentifier:kEJCMatchInboxSegmentedControlCellIdent];
...
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(refresh)
forControlEvents:UIControlEventValueChanged];
[self.matchTable addSubview:self.refreshControl];
...
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 0 && indexPath.section == 0) {
return NO;
}
return YES;
}
- (long)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (long)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
long rowCount = matches.count + 1;
NSLog(@"MatchInboxVC::numberOfRowsInSection %li", rowCount);
return rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"MatchInboxVC::cellForRowAtIndexPath %li", indexPath.row);
if(indexPath.row == 0 && indexPath.section == 0) {
// segmented control cell
EJCSegmentedControlCell *cell = [tableView dequeueReusableCellWithIdentifier:kEJCMatchInboxSegmentedControlCellIdent];
// Configure the cell...
if (cell == nil) {
cell = [[EJCSegmentedControlCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kEJCMatchInboxSegmentedControlCellIdent];
}
[cell.segmentedControl setSelectedSegmentIndex:selectedSegmentIndex];
[cell.segmentedControl addTarget:self action:@selector(changedSegmentSelection:) forControlEvents:UIControlEventValueChanged];
[cell.segmentedControl setTitle:@"Current" forSegmentAtIndex:0];
[cell.segmentedControl setTitle:@"Deleted" forSegmentAtIndex:1];
return cell;
}
else {
// match cell
EJCMatchInboxCell *cell = [tableView dequeueReusableCellWithIdentifier:kEJCMatchInboxCellIdent];
// Configure the cell...
if (cell == nil) {
cell = [[EJCMatchInboxCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kEJCMatchInboxCellIdent];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
EJCMatch *m = matches[indexPath.row - 1];
[cell setupWithMatch:m];
return cell;
}
}
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 0 && indexPath.section == 0) {
return 38.0f;
}
else {
return 65.0f;
}
}
记录输出:
MatchInboxVC::numberOfRowsInSection 2
MatchInboxVC::cellForRowAtIndexPath 0
MatchInboxVC::cellForRowAtIndexPath 1
答案 0 :(得分:2)
正确 - 我认为忘记正确读取方法定义是我自己的错,但显然在5S上为heightForRowAtIndexPath设置返回类型(float)会阻止单元格显示。
通过从
更改方法定义来解决- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
到
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath