現在、viewDidLoad メソッドでビューを作成しています。別のビューにリンクするさまざまなボタンが追加されています。私が抱えている問題は、ユーザーがボタンをクリックして IAP を購入できる他のビューに移動したときに、ユーザーが戻るボタンをクリックしたときに、ビューを「更新」して、この購入を示すことです。が活躍するようになりました。
ビューを更新するにはどうすればよいですか?
前もって感謝します
現在、viewDidLoad メソッドでビューを作成しています。別のビューにリンクするさまざまなボタンが追加されています。私が抱えている問題は、ユーザーがボタンをクリックして IAP を購入できる他のビューに移動したときに、ユーザーが戻るボタンをクリックしたときに、ビューを「更新」して、この購入を示すことです。が活躍するようになりました。
ビューを更新するにはどうすればよいですか?
前もって感謝します
でビューを構築しviewDidLoad
て、コントロールを 1 回だけ追加し、 で更新しviewWillShow
ます。viewWillShow
によってビルドが完了した直後に更新されることに注意してくださいviewDidLoad
。したがって、コントロールの外観を定義する値を最初viewController
に、たとえばデリゲート可変配列に保持します
たとえば、 and .mで an を作成して開始NSMutableArray
しますAppDelegate.h
.h インターフェースで
NSMutableArray *yourArray;
プロパティを追加
@property (retain, nonatomic) NSMutableArray *yourArray;
メートルで
@synthesyze yourArray;
.m で開始する
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
yourArray=[[NSMutableArray alloc]init];
//add initial objects to it as many as you have controls
}
最初にviewController
#import "AppDelegate.h"
-(void)viewWillShow:(BOOL)animated{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//pull objects from array and apply to your controls, say you have a string as a 1st obj
NSString *tmpStr=[appDelegate.yourArray objectAtIndex:0];//use it some where, say button's title
//etc
}
viewController
ユーザーの選択に応じて、2番目にこれらの値を変更します
#import "AppDelegate.h"
2番目のコードのどこかでviewController
、yourArrayの値を更新します
-(void)viewWillDisappear:(BOOL)animated{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//run a loop and update all objects
[appDelegate.yourArray replaceObjectAtIndex:i withObject:newObj];
}
viewController
1stに戻るとviewWillShow
、デリゲート配列から更新されます。
いくつかのオプションがあります。購入が行われたかどうかを保存してから、変更したいビューのviewWillAppearメソッドで購入が行われたかどうかを確認するメソッドを実行します
または...購入ページで変更が行われたときにボタンを変更するデリゲート コールバックをセットアップします (http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-custom-delegates/)
または... navigationController スタック ([[self.navigationController viewControllers]objectAtIndex:YOURVIEW]) からアクセスして、前のビューを直接操作します。
どのビューもsetNeedsDisplay
、そのビューを呼び出すことで明示的に更新できます。さらに、用語を と
混同しないでください。
自己プログラムされたカスタムビューでのみ発生する更新の問題はないと思います。関連するビューのデータが更新されていないことが予想されます。UIViewController
UIView