2013-10-14 71 views
2

我怎樣才能進入當前旋轉的UIPickerView的瞬時值? (UISlider有一個「連續」模式,但UIPickerView還沒有。)從UIPickerView獲取連續數據?

任何想法的解決方法?或者我錯過了什麼?

+0

@AntonioMG實現是正確的。除非您製作了自定義選擇器或查看第三方組件,否則無法繞過此**。如果你真的需要這個功能,你可能想看看[cocoacontrols.com](https://www.cocoacontrols.com/)。 –

+0

這**是可能的 - 請參閱下面的答案 –

回答

-1

爲UIPickerView委託只讓你選擇一個:

– pickerView:didSelectRow:inComponent: 

你不會得到當拾取器在旋轉的事件,例如像一個你可以得到一個UIScrollView是當滾動。

恐怕有得到它

0

要從UIPickerView獲得持續的數據沒有直接的方法,你只需要啓動一個定時器,並調用選擇器的selectedRow(inComponent:)功能。

事情是這樣的......

class TextSettingsViewController: UIViewController { 

    @IBOutlet fileprivate weak var picker: UIPickerView! 

    weak var timer: Timer? 

    deinit { 
     timer?.invalidate() 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let timer = Timer(timeInterval: 0.1, repeats: true) { [unowned self] timer in 
      let row = self.picker.selectedRow(inComponent: 0) 
      print("selectedRow: \(row)") 
     } 

     // You need to add the timer to UITrackingRunLoopMode so it fires while scrolling the picker 
     let runLoop = RunLoop.current 
     runLoop.add(timer, forMode: .commonModes) 
     runLoop.add(timer, forMode: .UITrackingRunLoopMode) 

     self.timer = timer 
    } 
} 
0

這可以用CADisplayLink

@property (nonatomic, strong) CADisplayLink *displayLink; 

self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleDisplayLink:)]; 
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:UITrackingRunLoopMode]; 

- (void) handleDisplayLink:(CADisplayLink *) displayLink 
{ 
    NSLog(@"%s %ld", __func__, [self selectedRowInComponent:0]); 
}