UIButton 没有出现在 iPhone 5S 上

Posted

技术标签:

【中文标题】UIButton 没有出现在 iPhone 5S 上【英文标题】:UIButton doesn't appear on iPhone 5S 【发布时间】:2014-02-11 01:22:41 【问题描述】:

我对 ios 开发和一般开发有点陌生。

我一直在开发一个时间/记录保存应用程序,但遇到了一个奇怪的问题。在我的一个视图控制器上,我有一个 UITableView,每个单元格都是一个通向不同视图控制器的按钮。在第一个单元格上,用户应该能够按下 UIButton 来运行开始计算时间的方法。当您运行该方法时,它会激活第二个 UIButton,用户可以按下该按钮来停止计时。在此过程中,单元格右侧的 UILabel 会显示经过的时间。

到目前为止,它一直运行良好,直到几天前。我下载并开始使用 Xcode 5.1 beta 5 并开始在其中开发应用程序。现在 UIButtons 不会出现在我的 iPhone 5S 或任何使用 iPhone 5S 的测试仪上。它适用于 iPhone 模拟器和真正的非 5S iPhone,包括 iPad。

我认为这可能是 64 位问题,但我查看了我的代码,找不到任何在 64 位设备上无法运行的内容。但我看过一个 Apple 开发者视频,它说 64 位设备上的 32 位应用程序将简单地加载 32 位 iOS 库并像那样运行它们。我还没有在我的应用程序上启用 ARM-64,因为到目前为止我在任何设备上都没有遇到任何问题。 Beta 5 中的 iOS 7.1 SDK 是否发生了变化,要求在 64 位设备上以不同方式调用 tableviews 或 UIButtons?我什至用 64 位模拟器试了一下,它也能正常工作。

我把相关代码放在下面。我是开发新手,如果有任何帮助,我将不胜感激。

//Set Button Properties
self.startTimeButton.frame = CGRectMake(0, 0, 100, 39);
self.startTimeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.startTimeButton setTitle:@"Start Time" forState:UIControlStateNormal];
self.startTimeButton.backgroundColor = [UIColor greenColor];
[self.startTimeButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.startTimeButton setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled];
[self.startTimeButton addTarget:self action:@selector(startCountingTime) forControlEvents:UIControlEventTouchUpInside];

//Set Button 2 Properties
self.stopTimerOut = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.stopTimerOut.frame = CGRectMake(100, 0, 100, 39);
[self.stopTimerOut setTitle:@"Stop Time" forState:UIControlStateNormal];
self.stopTimerOut.backgroundColor = [UIColor redColor];
[self.stopTimerOut setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.stopTimerOut addTarget:self action:@selector(stopCountingTime) forControlEvents:UIControlEventTouchUpInside];

//Set Timer Label
self.timerDisplayLabel = [[UILabel alloc] initWithFrame:CGRectMake(250, 0, 60, 40)];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// First Section - Time Section
if (indexPath.section == 0) 
    if (indexPath.row == 0) 
        [cell addSubview:self.startTimeButton];
        [cell addSubview:self.stopTimerOut];
        [cell addSubview:self.timerDisplayLabel];
        [cell addSubview:self.timerActivityDiscloser];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.accessoryType = UITableViewCellAccessoryNone;
    

    if (indexPath.row == 1) 
        cell.textLabel.text = @"Manually Enter Time";
    
    if (indexPath.row == 2) 
        cell.textLabel.text = @"View Time for Month";
    

这是我的头文件

@property (weak, nonatomic) UIButton *startTimeButton;
@property (weak, nonatomic) UIButton *stopTimerOut;
@property (strong, nonatomic) UILabel *timerDisplayLabel;

感谢您的帮助。

【问题讨论】:

iOS 测试版很棘手。尝试将应用程序重新构建为一个新项目,然后将您的工作复制到带有测试版的新项目中,看看它是否有效,或者它是否会引发警告或异常。使用测试版我了解到并不是所有的问题都解决了。毕竟它是一个测试版..:) 由于这个确切的问题,我遇到了问题。这仍然在 Xcode 5.1 和 iPhone 5S 的 GA 版本中发生。 【参考方案1】:

我找到了解决问题的方法。我像这样更改了头文件中的属性:

@property (strong, nonatomic) UIButton *startTimeButton;
@property (strong, nonatomic) UIButton *stopTimerOut;
@property (strong, nonatomic) UILabel *timerDisplayLabel;

我不知道为什么我需要将它们设置为“强”,而它们之前作为“弱”工作得很好并且仍然在模拟器上工作。我只能猜测 iOS 7.1 的 Beta 5 中发生了一些变化——我之前使用 Beta 3 构建。但是一旦我更改了属性,我就可以再次看到测试 iPhone 5S 设备上的按钮。

【讨论】:

如果解决了它,你应该接受你自己的答案。 直到明天我才会接受我自己的答案。我已经试过了。

以上是关于UIButton 没有出现在 iPhone 5S 上的主要内容,如果未能解决你的问题,请参考以下文章

iPhone5s不能越狱,出现failed to retrieve ………

iOS 7 机器人/iPhone 5s 在扬声器模式下出现乱码

使用自动布局在屏幕更改时调整自定义单元格中的 UIButton 字体

isScroll 插件在iPhone 5s 和以上版本

iPhone 5s 相机校准参数

将 UITableView 大小调整为 iPhone 5/5s