33

私がやっていること:

私のアプリでは、次のコードを使用してモーダル ビュー コントローラー (アプリ設定を含む) を提示しています。

    optionsViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl;
    [self presentModalViewController:optionsViewController animated:YES];

このトランジションは、ビューの下部を丸めて、いくつかの設定を表示するだけです。(例については、「マップ」アプリを参照してください。) ページの上半分をタップすると、元のビューがまだ表示されているがグレー表示されている場合、モーダル ビュー コントローラーは自動的に閉じられます (OS によって処理されます。このための t コード)。

-

機能していないもの:

これは iOS 4 で正常に動作しています (実際、私のアプリは現在 App Store にあります)。しかし、iOS 5 では、Apple がこのトランジションの動作を変更したようで、View Controller はそれ自体を終了しなくなりました。以前に OS によって処理された動作を再現しようとしていますが、方法がわかりません。

-

私が試したこと:

オプション ビューの上部に非表示のボタンを追加しても機能しません。その後、ページが完全に丸まってしまいますが、これは望ましくありません。

これとは別に、私は立ち往生しています。これが最初にどのように機能したかをどのように再現する必要がありますか (または、最初から間違った方法で実行していました!)。どんな助けでも大歓迎です!

4

6 に答える 6

71

おい、私は同じ問題に遭遇しました..そして、ここに私がparentViewControllerの使用について見つけたものがあります:

5.0 以降、これは表示中のビュー コントローラーを返さないことに注意してください。

これはUIViewControllerのヘッダーファイルに書かれていた...

私はShareKitを使用しています.modalViewControllerはiOS4で完全に機能していましたが、iOS5ではそれ自体を却下しません! これは、コードで以下を使用しているためです。

    [[currentView parentViewController] dismissModalViewControllerAnimated:animated];

これはモーダル表示のView Controllerであるため、parentViewControllerはnilを返します...

解決策を探して、あなたの質問を見つけました..だから、自分で修正することにしました:P

前の行を次のように変更しました。

    [currentView dismissModalViewControllerAnimated:YES];

魅力のように機能します。


編集:元の質問をどのように解釈するかによって、2 つの答えがあります。2番目は次のとおりです。

iOS5 では、モーダル コントローラーは、カールをクリックしたときにのみ閉じますが、カールや背景の上では閉じないようです。iOS5 では、背景またはカールの上をタップしたときに実際にモーダル ビューを閉じるために、次のコードをコントローラーに追加して、モーダル ビューのタップをリッスンしますが、ボタンへのタップは無視します。これは、ページ カールを使用してモーダル コントローラーを操作する場合、以前のバージョンの iOS の動作を模倣する必要があります。

- (void)viewDidLoad
{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    tap.numberOfTapsRequired = 1;
    tap.numberOfTouchesRequired = 1;
    tap.delegate = self;          
    [backgroundView addGestureRecognizer:tap];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    //change it to your condition    
    if ([touch.view isKindOfClass:[UIButton class]]) {      
       return NO;
    }
    return YES;
}

- (void)handleTap:(UITapGestureRecognizer *)sender {
    [self dismissModalViewControllerAnimated:YES];
}
于 2011-07-07T20:45:27.307 に答える
15

モーダルビューコントローラーを閉じるために使用しているコードは何ですか?私はこのようなコードを見てきました:

[self.parentViewController dismissModalViewControllerAnimated: YES];

これは、OSのすべてのバージョンで機能するわけではありません。ただし、これは次のとおりです。

[self dismissModalViewControllerAnimated: YES];

したほうがいい。

于 2011-07-02T18:34:37.700 に答える
1

私は同じ問題を抱えていましたが、使用する人にも影響します:

 [self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];

オブザーバーで修正し、却下した場所にこれを追加します。

[[NSNotificationCenter defaultCenter] postNotificationName:@"yourObserverName" object:self];

そして、これは親の親View Controllerで:

// add in viewDidLoad for example
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissModalVCFromParent:) name:@"yourObserverName" object: nil];

//The function
- (void) dismissModalVCFromParent:(NSNotification *)notif
{
   [self dismissModalViewControllerAnimated:YES];
}

// Don't forget remove
[[NSNotificationCenter defaultCenter] removeObserver:self];
于 2011-10-13T12:03:24.290 に答える
0

iOS5では、モーダルコントローラは、カールをクリックしたときにのみ自動的に閉じますが、カールや背景の上には閉じないようです。iOS5では、背景またはカールの上をタップしたときにモーダルビューが実際に閉じられるようにするために、次のコードをコントローラーに追加して、モーダルビューのタップをリッスンしますが、ボタンのタップは無視します。これは、ページカールのあるモーダルコントローラーを使用する場合の以前のバージョンのiOSの動作を模倣する必要があります。

- (void)viewDidLoad
{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    tap.numberOfTapsRequired = 1;
    tap.numberOfTouchesRequired = 1;
    tap.delegate = self;          
    [backgroundView addGestureRecognizer:tap];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    //change it to your condition    
    if ([touch.view isKindOfClass:[UIButton class]]) {      
       return NO;
    }
    return YES;
}

- (void)handleTap:(UITapGestureRecognizer *)sender {
    [self dismissModalViewControllerAnimated:YES];
}
于 2011-11-01T00:36:37.387 に答える
0

みんなありがとう、これは私に多くの時間を節約しました。のソース コードによると、 メソッドpresentModalViewControllerとメソッドが非推奨になっていることに気付きました。代替手段と方法があります。dismissModalViewControllerUIViewControoler.hpresentViewControllerdismissViewController

于 2011-10-22T17:13:11.913 に答える
0

これは、(現在の最終バージョンの)ios 5で動作するようです。

ページのカールを解除するには、特定の領域をタップする必要があることに気付きました。モーダル ビュー。

その狭いタップ領域の動作が ios 5 の新機能なのか、それとも既に存在していたのかはわかりません。うまくいけば、それは役に立ちます!

于 2011-10-13T03:15:43.023 に答える