UIPickerView 在 IOS 8 中不起作用

Posted

技术标签:

【中文标题】UIPickerView 在 IOS 8 中不起作用【英文标题】:UIPickerView Not Working In IOS 8 【发布时间】:2014-10-17 06:28:33 【问题描述】:

UIPickerView 在 ios 8 中不工作但它在 IOS 7 中工作没有错误,这是我的代码 一个名为 myArray 的数组在 pickerview 中加载数据

- (void)viewDidLoad

   [sliderView addSubview:_myPickerView];

    txtstreet.inputView=_myPickerView;
    myArray = arrwithdata;


- (NSInteger)numberOfComponentsInPickerView: (UIPickerView *)pickerView

      return 1;


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component


 return [myArray count];



- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)rowForComponent:(NSInteger)component

    return myArray[row];


-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
  inComponent:(NSInteger)component 


    NSString *resultString = [[NSString alloc] initWithFormat:@"%@", myArray[row]];
    txtstreet.text = resultString;

它在 ios7 中运行 这是在 IOS 8 设备中运行时出现的错误

2014-10-17 11:54:19.284 DispatchMe[2119:903697] *** Terminating app due to uncaught       
exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:   
 <UICompatibilityInputViewController: 0x145553dc0> should have parent view controller: 
 <RegistrationVC: 0x14560e930> but requested parent is:<UIInputWindowController: 
0x146037a00>'
 ***  First throw call stack:

(0x183e8e084 0x19446c0e4 0x183e8dfc4 0x1886aa688 0x188d09e14 0x188d0a968 0x18861e77c  
 0x188d0a794 0x188d06924 0x1886d2180 0x188691b3c 0x188691e10 0x1887114e8 0x1887c2288 0x1887c18f0 0x1887a7768 0x188640184 0x188aa8f78 0x18860475c 0x188602b08 0x18863e32c 0x18863d9cc 0x1886111d4 0x1888af98c 0x18860f73c 0x183e46324 0x183e455c8 0x183e43678 0x183d71664 0x18ceb35a4 0x1886764f8 0x100058068 0x194adaa08)
 libc++abi.dylib: terminating with uncaught exception of type NSException
 (lldb) 

【问题讨论】:

您是否使用 Actionsheet 来显示 Picker? 不,只显示选取器视图 【参考方案1】:

我通过以编程方式制作选取器视图来解决这个问题,问题出在我的视图中,因为我创建了两个视图,一个是主视图,第二个是滑块视图,从视图中调用选取器以获取滑块视图, 现在我的代码是这样的

 - (void)viewDidLoad

 UIPickerView *myPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 200, 320, 200)];
myPickerView.delegate = self;
myPickerView.showsSelectionIndicator = YES;
 //[sliderView addSubview:_myPickerView];

txtstreet.inputView=_myPickerView;
myArray = arrwithdata;

和其他代码是一样的......它在两个操作系统中都可以工作。

【讨论】:

【参考方案2】:

尝试一件事,如果两件事。

    删除

    [sliderView addSubview:_myPickerView];

此代码来自viewdidLoad 方法。

    如果这不起作用,则将该代码放回原处并分配并在视图中初始化您的pickerview确实加载方法

    _myPickerView = [UIPickerVuew alloc]init]

【讨论】:

【参考方案3】:

试试..

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) 

    alertController = [UIAlertController alertControllerWithTitle:nil
                                                          message:@"\n\n\n\n\n\n\n\n\n\n"
                                                   preferredStyle:UIAlertControllerStyleActionSheet];
    //pickerView.frame=CGRectMake(0, 0, 120, 30);
    UIView *toolView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 305.0f, 44.f)];
    toolView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blank-headerNew.png"]];
    CGRect buttonFrame = CGRectMake(220, 5, 70, 30);
    UIButton *selButton = [[UIButton alloc] initWithFrame:buttonFrame];
    //[selButton setBackgroundImage:[UIImage imageNamed:@"red_bgnew.png"] forState:UIControlStateNormal];
    [selButton setTitle:@"Done" forState:UIControlStateNormal];
    [selButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [toolView addSubview:selButton];
    [alertController.view addSubview:pickerView];
    [alertController.view addSubview:toolView];
    [self presentViewController:alertController animated:YES completion:nil];

【讨论】:

以上是关于UIPickerView 在 IOS 8 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UIActivityViewController 在 iOS 8 中不起作用

becomeFirstResponder 在 iOS 8 中不起作用

iOS 8 中的 UITableViewCell 约束在 iOS7 中不起作用

UINavigationBar 外观 addSubview 在 iOS 8 中不起作用

Unwind Segue 在 iOS 8 中不起作用

推送通知在带有 iOS 8.0 的 iPhone 6 中不起作用