我有一个 iOS 6 应用程序,我正在 StoryBoard 中使用 Xcode 5 将其转换为 iOS 7。一切正常,直到我决定在将应用程序转换为 iOS 7 后将自定义 UITableViewCell 添加到 tableview 控制器。我创建了通常的代码来执行此操作,但是当我运行应用程序时,它给出了一个意想不到的结果,它只显示了内容一个单元格行,它有点漂浮在 tableview 上方,它显示了它后面的空单元格行。当我滚动表格行时,我看到它们在后台滚动,并且在一个视图单元格行中显示的数据在滚动时会发生变化(参见附图)。但是,如果我单击看起来像空行的内容,则它可以正常工作,并且可以正确连接到详细视图控制器。我使用 Xcode 4 对 iOS 6 中的应用程序进行了相同的更改。6 在我的另一台 macbook 上,它工作正常(见附图)。所以我认为 iOS 7 处理 uitableviewcell 类的方式与 iOS 6 不同,或者我在 iOS 7 应用程序中的代码中犯了错误而没有意识到这一点。
这是无法正常工作的 iOS 7 代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
ExhibitorsViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[ExhibitorsViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
if (tableView == self.myTableView){
NSManagedObject *object = [self.objects objectAtIndex:indexPath.row];
cell.nameLabel.text = [object valueForKey:@"name"];
NSString * booth = [NSString stringWithFormat:@"Booth Number: %@", [object valueForKey:@"boothLabel"]];
cell.boothNumberLabel.text = booth;
}
else{
NSManagedObject *object = [results objectAtIndex:indexPath.row];
cell.nameLabel.text = [object valueForKey:@"name"];
NSString * booth = [NSString stringWithFormat:@"Booth Number: %@", [object valueForKey:@"boothLabel"]];
cell.boothNumberLabel.text = booth;
}
return cell;
}
这是有效的 iOS 6 代码(对我来说似乎是一样的,但我想我需要其他眼睛来查看它):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"Cell";
ExhibitorsViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (!cell) {
cell = [[ExhibitorsViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
if (tableView == self.myTableView){
NSManagedObject *object = [self.objects objectAtIndex:indexPath.row];
cell.nameLabel.text = [object valueForKey:@"name"];
NSString * booth = [NSString stringWithFormat:@"Booth Number: %@", [object valueForKey:@"boothLabel"]];
cell.boothNumberLabel.text = booth;
}
else{
NSManagedObject *object = [results objectAtIndex:indexPath.row];
cell.nameLabel.text = [object valueForKey:@"name"];
NSString * booth = [NSString stringWithFormat:@"Booth Number: %@", [object valueForKey:@"boothLabel"]];
cell.boothNumberLabel.text = booth;
}
return cell;
}
这是 iOS 7 应用程序中发生的情况的屏幕截图。
这是它的样子(这是在我进行自定义 UITableViewCell 更改之前)。