【问题标题】:UIButton image working on simulator but not on the deviceUIButton 图像在模拟器上工作但不在设备上
【发布时间】:2014-02-12 11:34:01
【问题描述】:

我有一个应用程序,其中有一个以编程方式创建的 UITableView 填充 UIButtons。下面的代码展示了如何创建一个UIButton。

它在模拟器上完美运行,但在设备上却不行。在模拟器上,按钮与 buttonImage.png 一起显示,但在设备上,图像不存在。按钮的所有其他方面都是正确的。

据我所知,该图像已正确添加到资源中。有什么想法吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
if (cell ==nil)
{
    cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(0,0,160, 160)];
[button setBackgroundImage:[UIImage imageNamed:@"buttonImage.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor colorWithRed:19/255.0f green:73/255.0f blue:17/255.0f alpha:1] forState:UIControlStateNormal];
button.titleLabel.font = [UIFont fontWithName:@"arial" size:20];
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"button" forState:UIControlStateNormal];

//more buttons created as needed

NSMutableArray *buttonArray = [[NSMutableArray alloc] init];
[array addObject:button];
//more buttons added to array as needed

[cell addSubview:[buttonArray objectAtIndex:indexPath.row]];

return cell;

}

【问题讨论】:

  • 试试[cell.contentview addSubview:[buttonArray objectAtIndex:indexPath.row]];
  • 嘿!您必须检查一件愚蠢的事情,这可能是您的问题。检查名称的大小写应该相同。例如:- buttonImage 或 buttonimage 它应该是相同的名称,相同的大小写。否则它将显示在模拟器而不是设备上。
  • 这可能是您的代码中的问题:stackoverflow.com/a/6773296/817365

标签: ios objective-c uibutton


【解决方案1】:

检查您的图像名称,因为模拟器不区分大小写,但设备区分大小写。

【讨论】:

  • 只要允许我就这样做了 :)
【解决方案2】:

我在使用 XCode 导航器窗口重命名应用程序中的图标时遇到了类似的问题。在模拟器中一切都很好,但是当我(最终)在我的设备上测试时,图标不会出现。我多次验证了拼写和大小写(在阅读了上面接受的答案之后),我什至将图标名称复制/粘贴到...没有骰子。

我尝试清理应用程序并重建...没有骰子。

最后,我完全关闭了 XCode,然后从“Launchpad”重新启动,......它成功了。

这是一个令人沮丧的时刻。对我来说,感觉就像那里有一个错误。

【讨论】:

  • 检查拼写后(如接受的答案中所建议),我尝试了此建议。重新启动 XCode 后,我还进行了清理/构建,这是一个很好的衡量标准。在那之后它起作用了。感谢您的提示。节省了我数小时的调试时间。
  • 注意:在您执行“Product ->Clean”以强制编译器在您下次构建时重新构建资产目录之前,无法更改标题。
【解决方案3】:

您的代码没有问题。我确定您已经在非视网膜模拟器上测试了您的应用程序并且它正在显示按钮。

所以现在当您在设备上进行测试时,我确定您是在视网膜设备上进行测试,并且您还没有提供 2x 版本的按钮图像。

解决方案:: 将 2x 版本的图像添加到您的资源中。

示例:: yourImage.png (32x32),然后将另一个图像添加到具有名称的资源 yourImage@2x.png (64x64)

这解决了你的问题。

希望对您有所帮助。

【讨论】:

  • 一个大写字母是问题 - 请参阅勾选的答案。感谢您的帮助。
  • 这个解决方案对我的 Apple Watch 应用很有帮助。
【解决方案4】:

尝试在您的代码中进行这些更改:

更改control event

[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchInside];

在单元格内容视图中添加按钮

[cell.contentview addSubview:[buttonArray objectAtIndex:indexPath.row]];

【讨论】:

    【解决方案5】:

    尝试从设备中删除已安装的应用,然后再次运行

    【讨论】:

    • 一个大写字母是问题 - 请参阅勾选的答案。感谢您的帮助。
    【解决方案6】:

    检查拼写并允许button.allowUserInteraction = true进行用户交互

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-19
      • 2023-03-23
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多