2010-09-06 106 views
2

即時通訊使用旋轉UIPickerView水平使用它。 迄今爲止,這工作正常。UIPickerView得到「點擊」元素?

現在我想獲得「點擊」UIPickerView行的視圖/標題。 當Picker 選擇一行時,Delegate使我有機會獲得「selectedRow」。我選擇它時不需要事件,我需要點擊它的事件。

有趣的是,我已經可以點擊元素了。我沒有添加任何按鈕或其他東西。 「clicked」元素/行被突出顯示爲一個按鈕。但我應該在哪裏附加事件監聽器?或者我如何得到這些事件?

我也嘗試添加按鈕作爲視圖到uipickerview。這工作到目前爲止,但我不能點擊任何按鈕。

我是否需要一個按鈕作爲在UIPickerView行中查看以獲取touchupinside事件或 我可以使用UIPickerView的普通行元素來獲得這樣的事件嗎?

thx任何幫助!

回答

0

當你點擊一個元素時,它將被自動選中。因此,selecetedRow方法會很好,而且在滑動時它會給你正確的元素(這不會發生在「點擊」方法中)。

要獲取UIPickerView事件,您可能希望將控制器設置爲符合UIPickerViewDataSource和UIPickerViewDelegate協議,並將選取器的委託和數據源設置爲控制器。這樣,您就可以設置pickerView與方法,如

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 

的內容和獲取事件:

– selectedRowInComponent: 
+1

thx回答,但我想這個不會幫助我很多。用戶應該用pickerview選擇一個值,然後通過直接點擊它來或多或少地提交他的選擇。也許我只是添加另一個按鈕來提交,但我認爲我可以使用行視圖... – Phil 2010-09-06 14:21:32

0

ü可以自定義pickerView並繼承其觸摸事件的方法。

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event { 
    if (!self.dragging) { 
    [self.nextResponder touchesEnded: touches withEvent:event]; 
    }  
    //here u can keep track of touch event(click ,double click) 
    [super touchesEnded: touches withEvent: event]; 
} 
+1

好吧,我想這應該工作,但我需要一個類擴展uipickerview的權利?哦,也許我應該真的建立一個自定義組件來解決這個問題,我只是認爲它更容易,因爲選擇器獲取事件。太糟糕了... – Phil 2010-09-06 14:19:48

8

這很容易:

- (void)viewDidLoad { 
    picker.userInteractionEnabled = YES; 
    UITapGestureRecognizer *tapGesture =[[UITapGestureRecognizer alloc] initWithTarget:self 
                         action:@selector(pickerTap)]; 
    [picker addGestureRecognizer:tapGesture]; 
    [tapGesture release]; 
} 

- (void)pickerTap { 
    NSLog(@"Picker tapped"); 
} 

你不需要繼承UIPickerView。

0

檢查this post,它可能不是您正在尋找的確切解決方案,但它有幫助。

我最初通過在每個選擇器項目中添加一個帶有行索引作爲標記的透明按鈕來實現點擊。它不再適用於iOS 7並且不得不尋找新的解決方案。