0

モーダル ビュー コントローラーと、通常のビュー コントローラーに埋め込まれたナビゲーション ビュー コントローラーがあります。これで、誰かがナビゲーション バーの UIBarButtonItem をクリックすると、モーダル ビュー コントローラーに移動します。アプリのデータを取得するための読み込みバーであるカスタム UIAlertView があります。これを ViewWillAppear メソッドに入れます。問題は、誰かがモーダル ビュー コントローラーに入り、ナビゲーション コントローラーに戻ると、UIAlertView が再びポップアップすることです。起動時にのみメソッドを実行できる方法はありますか? どんな助けでも大歓迎です。ありがとう!

ここにいくつかの詳細情報があります:私は元々(ViewDidAppearではなく)ViewDidLoadにそれを持っていましたが、同じことが表示され続けました。モーダルビューコントローラーの実装で何か間違っているのではないかと感じています。私は独自のカスタム ナビゲーション バーを持っているので、通常のナビゲーション バーを非表示にして、プログラムで performSeguewithIdentifier を呼び出しています。

4

4 に答える 4

5

ViewDidLoadの代わりにこのメソッドを使用しviewWillAppearます。

ViewDidLoadはロード時に 1 回呼び出され、viewWillAppearそのビューに入るたびに が呼び出されます。

于 2012-06-26T04:33:26.870 に答える
1

私はよく似たような問題に遭遇したので、Alinex-Asyncと呼ばれる Async の周りで頻繁に使用されるラッパーに関数ラッパーを追加しました。

これにより、任意の関数を簡単に定義して、頻繁に呼び出される可能性がありますが、一度しか実行されず、それ以降のすべての呼び出しで同じ結果が返されるようにすることができます。初めて実行するときに複数回呼び出された場合にも、正しく応答します。

CoffeeScript 疑似コードでは、次のように使用されます。

async = require 'alinex-async'
fn = async.once (cb) ->
  result = do something
  cb null, result 

2 番目の呼び出しでエラーが発生するか、複数回返されるが同時に 1 回だけ返される代替実装も利用できます。

于 2015-08-02T20:17:17.390 に答える
1

ViewDidLoad は、ビューがロードされるたびに発生します。これは、セッションごとに複数回発生する可能性があります (つまり、ビューを解放するメモリ リーク)。私がすることは、ブール型のインスタンス変数を作成し、init メソッドでそれを true に設定することです。次に、(viewWillAppear または viewDidLoad から) アラート ビューを表示する前に、このブール変数が true であることを確認します。

例えば:

@interface YourViewController : UIViewController {
   BOOL showAlert;
}
@end

@implementation YourViewController
- (id) init {
   // initiate everything else and add this line
   showAlert = true;
   return self;
}

- (void) viewDidLoad {
   if(showAlert) {
      //UIAlertView... blah blah blah, show your view
      showAlert = false;
   }
}
@end

これにより、アラートがセッションごとに 1 回だけ表示されるようになります。何らかの理由でViewControllerを解放する必要がない限り。その場合、この BOOL を AppDelegate.h クラスに格納する必要があります。

于 2012-06-26T06:04:35.843 に答える
0

GCD を使用している場合は、「dispatch_once」を試すことができます。

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    <#code to be executed once#>
});

https://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

于 2012-06-26T15:31:03.900 に答える