目标 C:UITableView:cellForRowAtIndexPath 在 iPhone 中被调用但在 iPad 中失败
Posted
技术标签:
【中文标题】目标 C:UITableView:cellForRowAtIndexPath 在 iPhone 中被调用但在 iPad 中失败【英文标题】:Objective C : UITableView : cellForRowAtIndexPath being called in iPhone but fails in iPad 【发布时间】:2014-04-02 06:17:46 【问题描述】:cellForRowAtIndexPath:
在 iPhone 中被调用,但在 iPad 中失败。因为我刚刚开始将现有的 iPhone 应用程序迁移到通用应用程序,所以至少现在我在两个环境中使用相同的 xib
文件。任何帮助将不胜感激,因为它已经破坏了我的 2 个工作日。(这不是因为“节数”或“节中的行”,尝试使用硬编码值)。
在 iPhone 模拟器上工作正常,但在 iPad 模拟器上不工作:
-(void)viewDidLoad
[super viewDidLoad];
[mytable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
mytable.delegate = self;
mytable.dataSource = self;
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//never get called when device is iPad simulator.
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [tableData count];//tried with return 1;
-(void)LoadBindMenu
//this method is called from external code, its working, do not suspect pls
//collection will be populated and reloading data
[mytable reloadData];
【问题讨论】:
您是否正确地将数据源提供给该类? 给出一些解决方案的代码 @ParvendraSingh 你可以在 Xib 中手动完成,无需代码! “我可以向你保证一切都设置正确”。这让我有点哭了。您严重缺乏有关您的问题的信息并且缺少代码,因此我们可以采取步骤进行重现。解决此问题,我们可以帮助您解决问题。 @Singh 我们如何使用断点的帮助,因为这些委托方法是在内部调用的。 【参考方案1】:写在你的 Prifix.pch 中
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
#define IS_IPHONE (([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"]) || ([[[UIDevice currentDevice] model] isEqualToString: @"iPhone Simulator"]))
#define IS_IPOD ([[[UIDevice currentDevice]model] isEqualToString:@"iPod touch"])
#define IS_IPOD_5 ((IS_IPOD) && IS_WIDESCREEN)
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
在你看来WillApper.......
if(IS_IPAD)
tableView.frame=CGRectMake(0,0,768,1024);
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
if ([[UIScreen mainScreen] bounds].size.height == 568)
tableView.frame=CGRectMake(0,0,320,568);
else
tableView.frame=CGRectMake(0,0,320,480);
【讨论】:
以上是关于目标 C:UITableView:cellForRowAtIndexPath 在 iPhone 中被调用但在 iPad 中失败的主要内容,如果未能解决你的问题,请参考以下文章
如何初始化添加到目标 c 中的 .xib 的 UITableView?
目标 C:使用代码将工具栏添加到 UITableView(在导航控制器中)
目标 C:UITableView:cellForRowAtIndexPath 在 iPhone 中被调用但在 iPad 中失败