Ios 刷新UINavigationController堆栈中的视图
我目前正在viewDidLoad方法中构建我的视图,它添加了链接到另一个视图的各种按钮。我遇到的问题是,当用户单击一个按钮并进入另一个视图时,他们可以购买IAP,然后当用户单击“后退”按钮时,我希望视图“刷新”,以显示此购买现在已激活 如何刷新视图Ios 刷新UINavigationController堆栈中的视图,ios,ios5,uinavigationcontroller,Ios,Ios5,Uinavigationcontroller,我目前正在viewDidLoad方法中构建我的视图,它添加了链接到另一个视图的各种按钮。我遇到的问题是,当用户单击一个按钮并进入另一个视图时,他们可以购买IAP,然后当用户单击“后退”按钮时,我希望视图“刷新”,以显示此购买现在已激活 如何刷新视图 提前感谢任何视图都可以通过在该视图上调用setNeedsDisplay来显式刷新。 此外,您不应将术语UIViewController与UIView混淆 我想你没有刷新问题,你只会在自我编程的自定义视图。我很抱歉相关视图的数据没有更新。您有几个选择。
提前感谢任何视图都可以通过在该视图上调用
setNeedsDisplay
来显式刷新。此外,您不应将术语
UIViewController
与UIView
混淆我想你没有刷新问题,你只会在自我编程的自定义视图。我很抱歉相关视图的数据没有更新。您有几个选择。存储是否进行了购买,然后运行方法检查是否在要更改的视图的ViewWillAspect方法中进行了购买 或者。。。 设置一个代理回调,在购买页面上进行更改时更改按钮(http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-custom-delegates/) 或者。。。
通过从navigationController堆栈([[self.navigationController viewControllers]objectAtIndex:YOURVIEW])访问上一个视图,直接添加上一个视图。在
viewDidLoad
中构建视图,这样您只添加一次控件,但在视图中刷新将显示。请记住,viewWillShow
将在viewDidLoad
完成构建后立即刷新它。因此,将定义控件外观的值保留在第一个viewController
上,例如,在委托可变数组中
e、 g.在AppDelegate.h
和.m中创建并启动NSMutableArray
in.h接口
NSMutableArray *yourArray;
添加属性
@property (retain, nonatomic) NSMutableArray *yourArray;
英寸
@synthesyze yourArray;
在1.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"
在第二个viewController
code中的某个位置,数组中的值在
-(void)viewWillDisappear:(BOOL)animated{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//run a loop and update all objects
[appDelegate.yourArray replaceObjectAtIndex:i withObject:newObj];
}
当您返回到第1个视图控制器
,视图将显示
将从您的代理数组中刷新它们。也许视图将显示
?这似乎是在上一个视图的基础上构建我的视图,因此,我在ViewWillExample方法上获得double?只需运行检查是否已购买的方法,以便更改按钮的文本。您如何检查以验证是否已购买?这似乎不起作用,我在viewWill-Isped方法中调用了此方法,如下所示:[self.view setNeedsDisplay];我认为您的一个子视图需要刷新。调用needsDisplayinviewwillbeen是没有意义的。但我认为您的问题不是由刷新问题引起的,可能是您的数据未更新。我已确保我的数据在ViewWill中刷新。基本上我现在需要刷新按钮视图,这样就不用买它,而是显示手表。如何刷新子视图?在添加子视图之前,请将它们存储在属性或字段中,然后您可以随时访问和刷新它们。另一种方法是指定view.tag=101。每个子视图都有一个不同的标记,然后你可以通过标记获得一个子视图,并刷新itOk,这是有意义的,但是,我把这个代码放在哪里,目前我有一个viewDidLoad方法,它显然是在第一次加载视图时被调用的,如果我把我所有的代码都放在viewWillExample方法中,它会保留原始视图,但会在顶部添加一个新的集合,这在逻辑上是有意义的,但在这种情况下,它会让我发疯,我感谢您的帮助和耐心。