1

我有一个 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 更改之前)。

4

1 回答 1

0

我想到了。我不得不将 uilabel 拖到 uitableviewcell 上方一点,直到我看到单元格边界突出显示。这将标签放置在单元格上方。然后我不得不将标签移回视单元。在 xcode 4.6 中不必这样做。但是,哦,好吧。

于 2013-10-04T16:12:21.453 回答