如果我在选择器旋转时使用完成按钮关闭 UIPickerview 的操作表,则获取空值

Posted

技术标签:

【中文标题】如果我在选择器旋转时使用完成按钮关闭 UIPickerview 的操作表,则获取空值【英文标题】:Getting null Value if I dismiss UIPickerview's Actionsheet with done button while picker spinning 【发布时间】:2012-11-08 07:50:10 【问题描述】:

我有一个UIActionSheet,其中包含一个picker 和一个UIToolbar。在 UIToolBar 上有一个完成按钮。但是,当我旋转Picker 组件并在它停止旋转之前,如果我点击Done 按钮,那么我的UITextfield 将没有任何价值。如果我在选择器停止旋转动画后点击Done 按钮,那么我将获得所选组件的值

有没有办法在停止动画之前获取项目的价值..?

解决

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

     UILabel *lbl = (UILabel *)view;

           // Reuse the label if possible...
           if ((lbl == nil) || ([lbl class] != [UILabel class])) 
               CGRect frame = CGRectMake(0.0, 10.0, 250, 50);
               lbl = [[[UILabel alloc] initWithFrame:frame] autorelease];
           
    if (component == 0) 

        lbl.textColor = [UIColor blackColor];
        lbl.textAlignment=UITextAlignmentLeft;
        lbl.backgroundColor = [UIColor clearColor];



        lbl.text = [arrCountry objectAtIndex:row];
        lbl.font=[UIFont boldSystemFontOfSize:14];
         NSInteger clm1 = [pickerView2 selectedRowInComponent:component];


        txtCountry.text = [arrCountry objectAtIndex:clm1];
        countryCode=[arrCountryCode objectAtIndex:clm1];
    

    return lbl;

还有

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

  txtCountry.text = [arrCountry objectAtIndex:row];
  countryCode=[arrCountryCode objectAtIndex:row];

【问题讨论】:

【参考方案1】:

我认为你不能交配。 UIPicker 仅在微调器停止时调用 didselectrow ,否则它会卡在先前选择的行上。你的情况是第一个。

使用 uipicker 最接近你的功能是这个委托方法:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

您必须查看屏幕上的视图及其与中心的偏移量。除此之外,您可以实现自己的滚动视图并拥有一个 uipicker 覆盖,但这涉及大量工作。

或者!你可以告诉你的用户以正确的方式使用 uipicker,哈哈。

阻止用户按下保存的另一种方法是检测 uipicker 是否正在旋转。我找到了this to help你。

【讨论】:

我在一个 iphone 应用程序中找到了这种类型的东西,这就是我尝试这样做的原因...:(【参考方案2】:

选择器委托

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

    //selectedRowInPicker is globle NSInteger
    selectedRowInPicker = row;
    yourTextField.text = [NSString stringWithFormat:@"%@",[pickerValueAry objectAtIndex:row]];

//完成BtnPress

-(void)doneBtnPressToGetValue

    yourTextField.text = [NSString stringWithFormat:@"%@",[pickerValueAry objectAtIndex:selectedRowInPicker]];

【讨论】:

【参考方案3】:

没有。 您只会在选择器停止时获得该值。 只有在某个时候,您才会调用选择器委托。

【讨论】:

以上是关于如果我在选择器旋转时使用完成按钮关闭 UIPickerview 的操作表,则获取空值的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIToolBar 上的完成按钮关闭 UIPickerView

修改 jQueryUI 日期选择器按钮

如何在 PickerView 顶部添加一个按钮以及如何在单击该按钮时关闭 PickerView?

相机图像选择器控件 - iOS7 中的自动旋转

在使用图像选择器选择图像时,如果我多次点击我的视图控制器也会关闭

在反应中以编程方式关闭蚂蚁设计范围选择器