如何检测 UIPickerView 上的变化?

Posted

技术标签:

【中文标题】如何检测 UIPickerView 上的变化?【英文标题】:How to detect changes on UIPickerView? 【发布时间】:2011-02-03 16:20:13 【问题描述】:

我想检测 UIPickerView 值的变化。

如果 UIPickerView 响应 addTarget 我使用了这样的代码:

-(void) valueChange:(id)sender 
    change = YES;
 

UIPickerView *questionPicker = [[UIPickerView alloc] init]; 
[questionPicker addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventValueChanged];

我怎样才能以正确的方式做同样的事情?

【问题讨论】:

【参考方案1】:

您必须使用选择器视图委托方法:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 

【讨论】:

【参考方案2】:
func pickerView(UIPickerView, didSelectRow: Int, inComponent: Int)

当用户选择组件中的一行时,由选取器视图调用。

这允许例如在选择更改时更新文本字段,只需松开手指。

【讨论】:

【参考方案3】:

Swift 4: 实现选择器视图委托:

optional public func pickerView(_ pickerView: UIPickerView, titleForRow row: 
   Int, forComponent component: Int) -> String?

例子:

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, 
forComponent component: Int) -> String? 
            let value = dummyListArray[row]
            if value == "someText"
              //Perform Action
            
            return value

或者

optional public func pickerView(_ pickerView: UIPickerView, didSelectRow row: 
   Int, inComponent component: Int)

例子:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, 
inComponent component: Int) 
            let value = dummyListArray[row]
            if value == "someText"
              //Perform Action
                    

【讨论】:

【参考方案4】:

最好重写这个函数

public override func selectedRow(inComponent component: Int) -> Int 
  let index = super.selectedRow(inComponent: component)
  //call closure or delegate as you want
  return index

UIPickerView 类中实时观察变化。

【讨论】:

不适合我。它只是在滚动停止时调用。【参考方案5】:

UIPickerViewDelegatepickerView:didSelectRow:inComponent:

【讨论】:

【参考方案6】:

如果您查看UIPickerViewDelegate,它有:

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

只需设置您的选择器视图委托并实现它。

【讨论】:

是否可以在选择器视图滚动时实时更新标签?我的意思是这需要时间。但要求是让它像在 android 中一样工作。(这是完美的) 老问题,但我的建议是,不要试图强迫 ios 成为 Android,因为任何一个平台的用户都可能习惯于不同的功能。没有“对”或“错”之分,只是不同。

以上是关于如何检测 UIPickerView 上的变化?的主要内容,如果未能解决你的问题,请参考以下文章

在 UIPickerView 上选择行时如何使用信息填充第二个视图控制器

UIActionSheet 中的 UIPickerView:UI 冻结

如何检测Android上的UI线程?

如何检测 UI 图像上的触摸?

如何模拟 Material UI Slider 上的值变化?

iPhone 上的节奏(声音变化)检测