当Xcode的4.5.2和iOS 6下编译UIPickerView不能自动选择最后一排(UIPick

2019-07-03 18:53发布

我一直在打我的头撞在墙上试图诊断我的应用程序的无法自动预选使用在旧版本的Xcode成功运行代码一个UIPickerView的最后一排。 我认为这是在Xcode,而不是iOS 6中的一个错误,因为我在iOS 6设备上运行旧的应用程序正常工作,但需要重新编译的Xcode 4.5.2下的代码工作不正常。 我已经把下面的示例演示此问题,但在此之前我提交bug报告,我想在这个论坛从别人的意见,以确定问题是否与我的代码或确实在Xcode / iOS的一个bug。

我创建的单一视图的应用程序和设置与导航控制器的故事板,以及两个IBOutlets,一个到一个UILabel其中I显示所选择的行,和一个以一个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,我相信这是一个错误,但希望其他人的意见或建议,我怎么能解决这个问题。 感谢您的关注。

Answer 1:

此错误是由故事板使用自动布局选项引起的,但我已经找到了解决办法,让我继续使用自动布局:

如果我叫[pickerView selectRow:inComponent:]方法在viewDidAppear:我的视图控制器,而不是在viewWillAppear中的:,然后UIPickerView正确地调整选择正确的行虽然选择暂时可见的机械臂从错误的旋转选择正确的一个。



Answer 2:

当然看起来与新的自动布局功能在IOS 6我正经历着同样的事情,但想看看它的iOS 5.1时发生的错误,我注意到,它开始工作。

试试这个:在相关的故事板或笔尖文件,关闭自动布局



文章来源: UIPickerView can't autoselect last row when compiled under Xcode 4.5.2 & iOS 6