web-dev-qa-db-ja.com

一部のボタンをクリックしたときにUIViewControllerをリロードする方法は?

私はiPhoneアプリを開発しています。UIViewControllerクラスがあり、カバーフローアニメーションがいくつかあります。デザインによれば、ビューの上に5つのボタンがあり、各ボタンにIBActionメソッドがあります。ボタンをクリックすると、さまざまなデータを含むさまざまなカバーフローのセットを表示する必要があり、カバーフローの数も1つのボタンアクションから別のアクションに変化します。私の問題は、これらのボタンをクリックしたときにページを更新する方法(リロード)です。明示的にviewDidLoadを呼び出すのは非常に悪い考えです。どうすればこれを達成できますか?何卒よろしくお願いいたします。

8
George

それ自体を再描画するビューを取得する最も簡単な方法は、[UIView setNeedsDisplay]を呼び出すか、[UIView setNeedsDisplayInRect]を使用することです。このメソッドは、自分自身とそのサブビューを再描画する必要があることをビューに伝えます。ただし、これを常に呼び出す必要はありません。ビューにそれ自体を再描画させる他の方法があります。たとえば、[UIView addSubview:]または[UIView removeFromSuperview]を使用してビュー階層にビューを追加または削除した場合などです。

これらのメソッドにより、システムはビューのdrawInRect:メソッドを呼び出します(カスタム描画コードでオーバーライドした場合)。カスタム描画でこのメソッドをオーバーライドしなかった場合は、サブビューが同じメッセージを受信するため、再描画する機会が得られます。

追加情報はこちら。特に「ビュー描画サイクル」というセクションをお読みください。

http://developer.Apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html

7
Carter

なぜページをリロードしたいのですか?ビューを変更していて再描画したい場合は、次のように呼び出すことができます。

setNeedsDisplay();

ただし、ビューの境界が変更されるたびに自動的に呼び出されるため、これは多くの場合必要ありません。

3
Oscar Gomez

ViewDidLoadメソッドで関心のある部分を更新/再ロードする以外に、他の要素が多すぎる場合は、更新部分をプライベートメソッド(methodAなど)に抽出できます。ボタンをクリックするたびに、そのmethodAを呼び出します。ただし、me​​thodAはまだsetNeedsDisplayを呼び出すか、関心のある部分を再描画する必要があると思います。それが役に立てば幸い。

1
Tony Xu

「UIViewController」を更新することが目的の場合は、次のようにします。

[self viewDidLoad];

ソース: プログラムでUIViewControllerを更新する方法?

1
To Refresh your UIViewController, When Clicking the button >>

Add the below code into your UIButton method,

-(IBAction)button:(id)sender{
    [self viewDidLoad];
    [self viewWillAppear:YES];
}

Now Build and Run Your Code. 
0
NandhaKumar