2011-08-05 26 views
1

我試圖通過僅僅觸摸視圖外部的UIPicker來解僱UIPickerView。我見過其他帖子,如this one,它解釋瞭如何在按下鍵盤之外時使用NotificationCenter關閉UIKeyboard。我想知道是否有類似的方式來做一個UIPickerView同樣的事情。現在我在UIActionSheet中使用完成按鈕,但我喜歡讓用戶選擇在視圖之外單擊的選項。 此外,我意識到使用「隱形按鈕」的想法,它的工作方式大致相同,我只是想看看是否有更優雅的解決方案。
在此先感謝。想要解除UIView中的UIPickerView而觸摸外部

+0

這個問題有幾個答案,包括一個[這裏](http://stackoverflow.com/questions/6782639/closing-a-uipicker-in-an-iphone-app/6782899#6782899) – progrmr

+0

我知道自定義按鈕並不是最優雅的,但它最容易做到,而不是浪費寶貴的時間來尋找不同的解決方案。用戶體驗是真正重要的,他們不會注意到差異。 –

回答

2

我已經通過創建自定義UIView,然後重寫UIView類的pointInside方法來完成此操作。這是每次UIView獲得觸摸通知時都會觸發的方法。當發生這種情況時,您可以查看觸摸是在視圖範圍內還是在視圖範圍之外。

例如您自定義的UIView看起來是這樣的:

CustomTouchUIView.h

#import 

@protocol CustomTouchUIViewDelegate 

- (void) uiViewTouched:(BOOL)wasInside; 

@end 

@interface CustomTouchUIView : UIView 

// Properties 
@property (nonatomic, assign) id delegate; 

@end 

CustomTouchUIView.m

#import "TOTouchUIView.h" 

@implementation CustomTouchUIView 

#pragma mark - Synthesize 
@synthesize delegate; 

#pragma mark - Touches 
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    if(point.x > 0 && point.x < self.frame.size.width && point.y > 0 && point.y < self.frame.size.height) 
    { 
     [delegate uiViewTouched:YES ]; 
     return YES; 
    } 

    [delegate uiViewTouched:NO ]; 
    return NO; 
} 
@end 

我有一個可下載的例子/教程在線here

+0

這看起來不錯。我必須試一試。謝謝 – Vince613