刷新UINavigationController堆栈中的视图

时间:2012-12-12 11:27:42

标签: ios ios5 uinavigationcontroller uinavigation

我目前正在viewDidLoad方法中构建我的视图,它添加了链接到另一个视图的各种按钮。我遇到的问题是,当用户点击按钮并进入另一个视图时,他们可以购买IAP,然后当用户点击后退按钮时,我希望视图“刷新”以显示此购买现在变得活跃了。

如何刷新视图?

提前致谢

3 个答案:

答案 0 :(得分:0)

可以通过在该视图上调用setNeedsDisplay来明确刷新任何视图 此外,您不应将UIViewControllerUIView混为一谈 我认为你没有刷新问题,你只能在自编程的自定义视图中。我怀疑相关视图的数据没有更新。

答案 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将从您的委托数组中刷新它们。