2012-04-30 9 views
0

UIPopoverビューに似たカスタムUIViewをビルドするだけで、UIViewクラスをサブクラス化し、内部のコントロールやイベントを構築します。このビューを表示するには、このようなクラスのデータソースUIPopoverControllerのようにカスタムUIViewを終了する

if ([dataSource respondsToSelector:@selector(containerView)]) 
     superView = [dataSource containerView]; 

と私は、ユーザーの任意の場所をタップした場合、この

- (void) showPopOverFromRect : (CGRect) rect 
{ 
    CGSize popSize = self.frame.size; 

    float yPoint; 

    if(ntPopOverDirection == NTPopOverArrowDirectionUP) 
     yPoint = rect.origin.y + 10; 
    else 
     yPoint = rect.origin.y - 10; 

    self.frame = CGRectMake(rect.origin.x - popSize.width, yPoint , popSize.width, popSize.height); 

    [superView addSubview:self]; 
} 

ようなので、私の質問..がどのように私は(それを削除)この表示を消すことができやっ機能を持っていることを表示しますちょうどUIPopOverControllerのようなスーパービューで?

答えて

-1

新しいUIViewの下に透明なUIButtonを配置することができます。この新しいボタンを押すと、ビューが閉じられ、スーパービューから削除されます。以下のような

何か:

- (void) showPopOverFromRect : (CGRect) rect 
{ 
    CGSize popSize = self.frame.size; 

    float yPoint; 

    if(ntPopOverDirection == NTPopOverArrowDirectionUP) 
     yPoint = rect.origin.y + 10; 
    else 
     yPoint = rect.origin.y - 10; 

    self.frame = CGRectMake(rect.origin.x - popSize.width, yPoint , popSize.width, popSize.height); 

    UIButton *dismissButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    dismissButton.backgroundColor = [UIColor clearColor]; 
    dismissButton.frame = [[UIScreen mainScreen] bounds]; 
    [dismissButton addTarget:self.delegate action:@selector(dismissPopover) forControlEvents:UIControlEventTouchUpInside]; 
    [superview addSubview:dismissButton]; 

    [superView addSubview:self]; 
} 

あなたはしかし、それはポップオーバーを却下するメッセージを受け取る代理人としてスーパーだ設定するビューを設定する必要があると思います。

+0

ああ私はそれを逃した!いくつかの変更とそれは動作します..ありがとう。 –

+0

ユーザがポップオーバーの左または右をタップするとどうなりますか?彼らは "クリア"ボタンをタップしません。 – bbarnhart

+0

@bbarnhartだが、UIPopControllerでは、ポップオーバー以外の場所をタップして矢印の横にあると、それは解除されます!それで何が間違っていますか? –

2

カスタムUIViewを作成して、スーパービュー全体または画面全体を透明な背景または放射状の勾配で塗りつぶすことをお勧めします。この内部では、ポップオーバーのルックアンドフィールを持つ別のUIViewを配置します。

これにより、タップをキャプチャして他のビューから通知を送信しようとする問題が解決されます。それは自己完結型です。

ユーザーがクリア領域に触れると、ジェスチャー認識機能をカスタム表示内に簡単に追加して表示を閉じることができます。

+0

あなたの提案に+1。ありがとう。 –

関連する問題