1

performSegueWithIdentifierポップオーバーウィンドウを表示するボタン呼び出しメソッドという基本的なフォームがあります。ポップオーバーがアクティブになるまで、メインビューウィンドウをブラックアウト(暗く)するにはどうすればよいですか?

私は次のようにライブラリSVProgressHUDを使用しようとしました :

- (IBAction)publishButtonAction:(id)sender {
    [SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack];
    [self performSegueWithIdentifier:@"fbshareSigue" sender:self];
    [SVProgressHUD dismiss];
}

ポップオーバーウィンドウが表示されるまで、一瞬で取得されます。

これを試す場合、このコードをどこに挿入する必要がありますか?:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if ([[segue identifier] isEqualToString:@"fbshareSigue"]) {
        OFAFBShareViewController *svc = (OFAFBShareViewController *) [segue destinationViewController];
        UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue *)segue;
        svc.postBlock = self.postInitBlock;
        [svc setClosePopWindow:[popoverSegue popoverController]];
    }
}

    - (IBAction)publishButtonAction:(id)sender {
        UIView *dimView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
        dimView.backgroundColor = [UIColor blackColor];
        dimView.alpha = 0.5f;
        dimView.tag = 1111;
        dimView.userInteractionEnabled = NO;
        [self.view addSubview:dimView];

        [self performSegueWithIdentifier:@"fbshareSigue" sender:self];
}

  /* This code should be put in the other method where you are removing the popup.. Because it will remove the dim view. here is the wrong place for this code*/  

 /* for (UIView *view in [self.view subviews]) {
        if (view.tag == 1111) {
            [view removeFromSuperview];
        }
    }*/

薄暗いは動作しません...

====================

私はOFAResultViewControllerポップオーバー()を呼び出すという見解を持っていますOFAFBShareViewController

...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if ([[segue identifier] isEqualToString:@"fbshareSigue"]) {
        OFAFBShareViewController *svc = (OFAFBShareViewController *) [segue destinationViewController];
        UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue *)segue;
        svc.postBlock = self.postInitBlock;
        [svc setClosePopWindow:[popoverSegue popoverController]];
    }
}

- (IBAction)publishButtonAction:(id)sender {
    UIView *dimView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    dimView.backgroundColor = [UIColor blackColor];
    dimView.alpha = 0.5f;
    dimView.tag = 1111;
    dimView.userInteractionEnabled = NO;
    [self.view addSubview:dimView];
    [self performSegueWithIdentifier:@"fbshareSigue" sender:self];    
}
...

薄暗いビューを閉じよOFAFBShareViewControllerうとしています:

...
- (IBAction)cancelButtonAction:(id)sender {
    [closePopWindow dismissPopoverAnimated:YES];
    for (UIView *view in [self.view subviews]) {
            if (view.tag == 1111) {
                [view removeFromSuperview];
            }
}
...

しかし、それは再び機能しません...

4

2 に答える 2

2

ポップアップを表示するときは、次のコードを使用できます。

OFAFBShareViewControllerで

- (void) loadView
{
       [super loadView]; 
       UIView *dimView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
        dimView.backgroundColor = [UIColor blackColor];
        dimView.alpha = 0.5f;
        dimView.tag = 1111;
        dimView.userInteractionEnabled = NO;
        [self.view addSubview:dimView];
}

ポップアップを削除したら、タグを使用してこのビューをスーパービューから削除します。

iOS 5.0以降、パブリックAPIメソッドも導入されました。

================================================== ====

ビューを削除するには、次のコードを使用できます。

 for (UIView *view in [self.view subviews]) {
                if ([view.tag == 1111]) {
                    [view removeFromSuperview];
                }
            }

RemoveDimViewコードはそのままにしておきます。もう一度変更super.viewするだけです。self.view

それはあなたのために働くでしょう。

それがあなたのために働くことを願っています...

于 2012-10-30T13:07:49.877 に答える
0

ポップオーバーを作成するときに、現在のビューに薄暗いビューを追加し、現在のビューをポップオーバーコントローラーのUIPopoverControllerDelegateとして追加します。

  1. dimViewを追加します。

    let dimView = UIView(frame: view.frame)
    view.addSubview(dimView)
    dimView.backgroundColor = UIColor.blackColor()
    dimView.alpha = 0.5
    dimView.tag = 1234
    dimView.userInteractionEnabled = false
    view.addSubview(dimView)
    
  2. popoverControllerのデリゲートとしてオリジンビューを追加します。

    popoverViewController!.delegate = self
    

次に、ポップオーバーが閉じられたときにdimViewを削除するには、現在のビューをUIPopoverControllerDelegateを実装するように設定し、popoverControllerDidDismissPopover関数を実装します。この関数内で、dimViewを削除します。

extension MyOriginViewController: UIPopoverControllerDelegate {

    func popoverControllerDidDismissPopover(popoverController: UIPopoverController) {
        for subView in view.subviews {
            if subView.tag == 1234 {
                 subView.removeFromSuperview()
            }
        }
    }
}    
于 2015-06-03T18:37:39.003 に答える