1

UITableView(A) で、このテーブルビューの 1 つのセルを選択すると、別のビュー (B) にプッシュされます。ビュー (B) で BACK ボタンを押すと、この pushBack 関数が実行されます。

    - (void)pushBack
    {
        [self.navigationController popViewControllerAnimated:YES];
    }

パラメータをビュー(A)に送信したい.パラメータは、ビュー(A)を更新する必要があるかどうかを判断するために使用されます。どうすればいいですか?

前もって感謝します!

4

3 に答える 3

0

最初の質問に答えるには、バックグラウンドから戻ったときにスプラッシュ イメージを表示できるようにするには、アプリケーションをバックグラウンドで実行できないように定義する必要があります。これは、info.plist の「アプリケーションはバックグラウンドで実行されません」フラグを YES に変更することによって行われます。

于 2012-06-30T09:47:07.447 に答える
0
  1. これはシミュレーターのバグです。アプリが戻ったときに Default.png を表示する場合は、2 つの選択肢があります。1 つ目は、Info.plistに設定UIApplicationExitsOnSuspendすることです。YESただし、これには、マルチタスクに作業を任せるのではなく、アプリケーションの状態を保存して読み込む必要があります。別の方法は、パスコード ロックを有効にした場合に Dropbox が行うのと同じように、アプリケーションに Default.png を重ねて-applicationWillResignActive:で削除することです。-applicationDidBecomeActive:

  2. 呼び出されたメソッドを実装し-(void)willBecomeVisible:(MyParameterType *)parameterます(ただし、パラメーターはポインターではない場合があります)。次に-pushBack、View Controller をポップする前に、次の操作を行います。

...

NSArray *viewControllers = [[self navigationController] viewControllers];  
NSUInteger count = [viewControllers count];  
if (count >= 2) { // Ensures we will not have an out of bounds exception
    UIViewController *viewController = [viewControllers objectAtIndex:count-2]; // Gets the view controller that will become visible
    if ([viewController respondsToSelector:@selector(willBecomeVisible:)]) { // In case this view controller was pushed from a different view controller  
        [(MyTableViewAController *)viewController willBecomeVisible:myParameter];  
    } else {  
        NSLog(@"View controller about to become visible does not respond to -willBecomeVisible:");  
    }  
} else {  
    NSLog(@"Not enough view controllers on the navigation stack!");  
}
于 2012-06-30T11:19:04.887 に答える
0

Model-View-Controllerデザイン パターンについて読む必要があります。これは、iOS 開発で非常に役立ちます。

一般に、コントローラは別のコントローラのビューにリフレッシュが必要であることを直接伝えるべきではありません。ViewControllerAビューを更新するのは の責任です。ただし、コントローラーは互いに通信して、モデルの状態の変化について通知することができます (または、モデル自体を介して行うこともできます)。

この場合、おそらく最も簡単な解決策はViewControllerB、メッセージを送信することです。そのため、必要なときに呼び出すことができるようにViewControllerA、インターフェイスを定義し、作成時にへViewControllerAの参照を渡す必要があります。例えば:ViewControllerAViewControllerB

ViewControllerA...

- (void)stateChanged
{
    // Code to handle the change and update the view if it's visible.
    // Alternatively, just set a BOOL flag here and then check it in
    // viewWillAppear so that the view-update only happen later on when
    // the view is actually about to appear.
}

あなたのpushBack方法でViewControllerB...

- (void)pushBack
{
    [viewControllerA stateChanged];
    [self.navigationController popViewControllerAnimated:YES];
}

必要な追加の値を渡すことができますstateChanged- これは単なる例です。よりクリーンな方法は、デリゲートを使用するか、コントローラーからモデル自体を観察することですが、MVC を学習し、M、V、および C を最適に分離および分離する方法を学習しているときに理解しやすいと思います。

于 2012-07-01T00:26:00.313 に答える