我的 XIB 中的两个 UITableViewCells for iPad/iPhone

Posted

技术标签:

【中文标题】我的 XIB 中的两个 UITableViewCells for iPad/iPhone【英文标题】:Two UITableViewCells in my XIB for iPad/iPhone 【发布时间】:2013-04-15 16:06:32 【问题描述】:

我正在尝试使用两种不同格式的 UITableViewCells,具体取决于它是 iPad 还是 iPhone。两个单元格显示相同的信息,但 iPad 单元格的高度是一半,宽度是两倍。所以信息显示在一行而不是两行。

在我的cellforRowatIndexPath

我正在输入代码:

HistoryCell *cell;
if (self.isiPad) 
    cell = [self.tableView dequeueReusableCellWithIdentifier:@"historyiPadCellType" forIndexPath:indexPath];


else
    cell = [self.tableView dequeueReusableCellWithIdentifier:@"historyCellType" forIndexPath:indexPath];


但是,如果我在同一个 XIB 中有 2 个 UItableViewCell,它似乎会给我一个错误: invalid nib registered for identifier (historyCellType) - nib must contain exactly one top level object which must be a UITableViewCell instance'

有没有办法解决这个问题?

谢谢!

【问题讨论】:

我更喜欢自定义 UITableViewCell 并处理 ipad 和 iphone 信息。 AT cellForRowAtIndexPath at uitableView 处理单元格宽度和高度.. @GeorgeHanna 是的,但问题是我需要将最初位于第二行的所有对象转移到第一行。如果我只是创建另一个单元格并使用 AutoLayout 进行所有设置,这似乎更容易 【参考方案1】:

为 iPad 和 iPhone 使用不同单元的最佳方法是使用 2 个笔尖: HistoryCell~iphone.xibHistoryCell~ipad.xib

你必须注册你的笔尖:

[self.tableView registerNib:[UINib nibWithNibName:@"HistoryCell" bundle:nil] forCellReuseIdentifier:@"historyCellType"];

系统根据当前设备自动加载xib。

【讨论】:

太棒了。我不知道这个巧妙的技巧。无论如何我可以强制它在 iPad 模拟器中默认为 iPad 版本吗?它似乎一直默认为 iPhone 版本。谢谢你,亚历山大! 欢迎您! iPad模拟器默认会加载HistoryCell~ipad.xib,如果你想加载特定的nib你应该指定文件名。

以上是关于我的 XIB 中的两个 UITableViewCells for iPad/iPhone的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xamarin 中的两个 xib 文件之间切换?

如何将 xib 加载到一个视图控制器中的两个容器视图中

如何链接两个xib?

如何从 XIB 文件访问 ViewController 中的 IBoutlet

将两个 xib 文件中的两个 tableviews 添加到主 xib 视图

我应该有两个 XIB 来处理 iOS 和 iOS 6 吗?