UITableView 未显示运行 iOS 5 的 iPad

Posted

技术标签:

【中文标题】UITableView 未显示运行 iOS 5 的 iPad【英文标题】:UITableView not showing iPad running iOS 5 【发布时间】:2012-01-19 18:52:18 【问题描述】:

我遇到了一个奇怪的问题,该问题从现在出现在哪里。我不确定是因为我没有更新到 Xcode 4.2.1 还是 ios 5。

我有一个在操作系统 4.0 - 5.0 上运行的 iPad 应用程序。

我有一个 UITableView,它包含在一个以模态方式显示为表单的视图中。

该表在 4.x 上运行良好,但在 5.0 上运行时该表消失。

我知道每个人都听过这句话一​​百万次了,但昨天它确实运行良好,我没有更改任何内容,现在它不起作用。我昨天有一个工作副本,它安装在运行 iOS 5 的额外 iPad 上。今天它不想工作。

这是我的设置方法,也许你能发现问题。

    UITableView 是在 IB 中创建的。设置了数据源和委托。

    视图是这样调用的:

GuidedSearchPriceViewController *guide = [[GuidedSearchPriceViewController alloc] initWithNibName:@"GuidedSearchPriceViewController_iPad" bundle:nil];
UINavigationController *temp = [[UINavigationController alloc] initWithRootViewController:guide]; 
temp.modalPresentationStyle = UIModalPresentationFormSheet; 
[guide setModalDelegate:self]; 
[guide setAppDelegate:self.appDelegate]; 
temp.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:temp animated:YES];

iOS 4.x 中,我们得到这个:

但是 iOS 5 我们得到这个:

Price 视图的 viewDidLoad 方法是:

- (void)viewDidLoad


    [super viewDidLoad];

    //Tried for testing but still does nothing
    self.table.delegate = self;
    self.table.dataSource = self;

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Type" style:UIBarButtonItemStyleBordered target:self action:@selector(nextScreen)];
    addButton.enabled = NO;
    self.navigationItem.rightBarButtonItem = addButton;

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
        UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismiss)];

        self.navigationItem.leftBarButtonItem = cancel;
        self.navigationController.navigationBar.tintColor = [UIColor redColor];
        self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.png", [[NSBundle mainBundle] bundlePath], RP_iPad_FormsheetBackground]]];

     else
        self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.png", [[NSBundle mainBundle] bundlePath], RP_BackgroundImage]]];

    // Make sure the background of the table is clear. I have also tried taking this out
    // to resolve the disappearing issue but it has no effect. 
    if ([self.table respondsToSelector:@selector(backgroundView)]) 
        [self.table setBackgroundView:nil];
        [self.table setBackgroundView:[[UIView alloc] init]];
        [self.table setBackgroundColor:UIColor.clearColor]; 
    

    priceList = [[NSArray alloc] initWithObjects:@"$750", @"$1000", @"$1250", @"$1500", @"$1750", @"$2000", @"$2000 +", nil];


非常感谢您的帮助,并一如既往地感谢您抽出宝贵的时间。


回答

我设法找出了问题所在,但我不确定它为什么会发生。也许有人可以对此有所了解。

我必须插入

[table reloadData];

-(void)viewDidLoad结尾

我不确定为什么它必须存在于 iOS 5 而不是 iOS 4.x

【问题讨论】:

是否有新的编译器警告或运行时警告? 否定先生。我什至在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 中设置了断点以确保它被调用。 (它正在被调用)。 如果您自己解决了问题,通常在堆栈溢出时将您的解决方案作为答案并自己接受;这样每个人都可以看到问题已经解决了:) 【参考方案1】:

如果您在表格视图中使用UITableViewController,“When the table view is about to appear the first time it’s loaded, the table-view controller reloads the table view’s data.”

“If you choose not to use UITableViewController for table-view management, you must replicate what this class gives you ‘for free.’”

第二个链接中的示例代码在设置其委托和数据源后将reloadData 发送到表。也许在 iOS 4 中,表格视图在加载时会自动重新加载,而在 iOS 5 中它已更改为与文档匹配。

【讨论】:

以上是关于UITableView 未显示运行 iOS 5 的 iPad的主要内容,如果未能解决你的问题,请参考以下文章

iOS:UITableView 表数据未显示在子类别中:iPhone

在 iOS8 的 Interface Builder 中向 UITableView 添加静态单元格?内容部分未显示

iOS 帮助:UITableViewCell 类的自定义设计未显示在 UITableView 中

IOS 蓝牙 LE 扫描设备未添加到 uitableview

在 UITableView 中显示文件的 NSArray - iOS 5

复选标记未显示在 UITableView 中的 iPad 上