18

我一直在努力诊断我的应用程序无法使用在旧版本 XCode 下成功运行的代码自动预选 UIPickerView 的最后一行。我认为这是 Xcode 而不是 iOS 6 中的错误,因为我在 iOS 6 设备上运行的旧应用程序可以正常工作,但是在 Xcode 4.5.2 下重新编译代码不能正常运行。我整理了以下示例来演示该问题,但在我提交错误报告之前,我想从这个论坛上的其他人那里获得意见,以确定问题是出在我的代码上还是确实是 Xcode/iOS 中的错误。

我创建了一个单视图应用程序并使用导航控制器和两个 IBOutlet 设置故事板,一个用于显示所选行的 UILabel,一个用于 UIPickerView。

这是我的自定义视图控制器的头文件:

#import <UIKit/UIKit.h>

@interface DisposableViewController : UIViewController
    <UIPickerViewDataSource, UIPickerViewDelegate>
@end

这是我的自定义视图控制器的实现文件:

#import "DisposableViewController.h"

const NSInteger MAX_VALUE = 10;

@interface DisposableViewController ()

@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@property (weak, nonatomic) IBOutlet UILabel *selectedValueLabel;

@end


@implementation DisposableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}


- (void)viewWillAppear:(BOOL)animated
{
    [self.pickerView reloadAllComponents];
    [self.pickerView selectRow:MAX_VALUE inComponent:0 animated:NO];
    self.selectedValueLabel.text = [NSString stringWithFormat:@"%d", [self.pickerView selectedRowInComponent:0]];
}


//**
//** UIPickerViewDataSource methods
//**

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return MAX_VALUE + 1;
}


//**
//** UIPickerViewDelegate methods
//**

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [NSString stringWithFormat:@"%d", row];
}


- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    self.selectedValueLabel.text = [NSString stringWithFormat:@"%d", row];
}


@end

这是演示问题的屏幕截图:

截屏

请注意,我的代码尝试在 viewWillAppear: 方法中自动选择 UIPickerView 中的最后一行,但是当程序运行时,值标签在调用 [self.pickerView selectedRowInComponent:0] 时获取该行为 10,但 UIPickerView 本身在视觉上出现已选择 9. 我认为这是一个错误,但希望有其他意见或建议来解决此问题。感谢您的关注。

4

2 回答 2

12

这个错误是由情节提要中的使用自动布局选项引起的,但我找到了一种解决方法,可以让我继续使用自动布局:

如果我调用[pickerview selectrow:pickerview selectrow:pickone选择正确的一个。

于 2012-11-15T03:16:08.187 回答
2

绝对看起来像是与 iOS 6 中新的自动布局功能相关的错误。我遇到了同样的事情,但是当试图查看它是否发生在 iOS 5.1 中时,我注意到它开始工作了。

试试这个:在有问题的故事板或 nib 文件中,关闭auto-layout

于 2012-11-13T21:23:57.417 回答