我的应用在几个不同的视图中使用 UIStepper 控件。我发布了一个应用程序的小更新,它根本不应该影响这些视图,并且我开始收到报告说应用程序中的所有 UISteppers 现在都已禁用。一位用户发送了一个屏幕截图,并且步进器控件看起来好像它的 enabled 属性设置为 NO。但是,我的代码中根本没有设置此属性的位置,默认值为 YES。我已经在我的应用程序中搜索了“启用”一词的实例,以确保我不会以某种方式意外禁用它,而我不是。
我认为可能在 iOS 版本之间启用属性的默认值发生了变化,但报告此问题的用户正在运行 iOS 5.1.1,与我的开发设备相同。我才开始听说这个应用程序更新的问题。
除了设置启用属性,我发现如果最小值和最大值设置为相同的值,步进器将被禁用。我很确定这不会发生在我的应用程序中。这些值是硬编码的并传递给一个设置方法,自从许多应用程序版本之前我就没有更改过这个代码。
你知道发生这种情况的任何其他原因吗?我自己无法重现问题,而且它只影响部分用户,因此很难解决。
这是我创建 UISteppers 的代码,值得:
- (UIStepper *)makeStepperInput:(float )currentValue minValue:(float)minValue maxValue:(float)maxValue increment:(float)increment {
int stepperWidth = 94;
int stepperHeight = 27;
CGRect stepperFrame = CGRectMake(0, 0, stepperWidth, stepperHeight);
UIStepper *stepperInput = [[[UIStepper alloc] initWithFrame:stepperFrame] autorelease];
stepperInput.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
[stepperInput setValue:currentValue];
[stepperInput setMinimumValue:minValue];
[stepperInput setMaximumValue:maxValue];
[stepperInput setStepValue:stepValue];
[stepperInput setContinuous:NO];
NSLog(@"making stepper with values %f, %f, %f, %f (%i)", currentValue, minValue, maxValue, stepValue, stepperInput.enabled);
[stepperInput addTarget:self action:@selector(onChange:) forControlEvents:UIControlEventValueChanged];
return stepperInput;
}
更新:我有一个用户愿意使用上面的 NSLog 行安装调试版本。他向我发送了控制台输出,它显示步进器的最小值和最大值是正确的(在一种情况下为 1 和 20)并且启用的属性为 YES。不幸的是,这消除了我关于这里可能发生的事情的两个理论......