我目前正在viewDidLoad方法中构建我的视图,它添加了链接到另一个视图的各种按钮。我遇到的问题是,当用户点击按钮并进入另一个视图时,他们可以购买IAP,然后当用户点击后退按钮时,我希望视图“刷新”以显示此购买现在变得活跃了。
如何刷新视图?
提前致谢
答案 0 :(得分:0)
可以通过在该视图上调用setNeedsDisplay
来明确刷新任何视图
此外,您不应将UIViewController
与UIView
混为一谈
我认为你没有刷新问题,你只能在自编程的自定义视图中。我怀疑相关视图的数据没有更新。
答案 1 :(得分:0)
您有几个选择。存储是否已进行购买,然后运行检查是否在您希望更改的视图的viewWillAppear方法中进行购买的方法
或... 设置代理回调,在购买页面上进行更改时更改按钮(http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-custom-delegates/)
或... 直接通过从navigationController堆栈([[self.navigationController viewControllers] objectAtIndex:YOURVIEW]访问它来直接操作前一个视图)
答案 2 :(得分:0)
在viewDidLoad
中构建视图,因此您只需添加一次控件,但在viewWillShow
中进行刷新。请注意,viewWillShow
会在viewDidLoad
完成构建后立即刷新它。因此,请保留在第一个viewController
上定义控件外观的值,例如,在delegate mutable array
e.g。在NSMutableArray
和.m
AppDelegate.h
<。>界面中的
NSMutableArray *yourArray;
添加属性
@property (retain, nonatomic) NSMutableArray *yourArray;
in .m
@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
中的值
#import "AppDelegate.h"
myArray中的第二个viewController
代码更新值中的某个位置
-(void)viewWillDisappear:(BOOL)animated{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//run a loop and update all objects
[appDelegate.yourArray replaceObjectAtIndex:i withObject:newObj];
}
当您返回第1 viewController
时,viewWillShow
将从您的委托数组中刷新它们。