Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 刷新UINavigationController堆栈中的视图_Ios_Ios5_Uinavigationcontroller - Fatal编程技术网

Ios 刷新UINavigationController堆栈中的视图

Ios 刷新UINavigationController堆栈中的视图,ios,ios5,uinavigationcontroller,Ios,Ios5,Uinavigationcontroller,我目前正在viewDidLoad方法中构建我的视图,它添加了链接到另一个视图的各种按钮。我遇到的问题是,当用户单击一个按钮并进入另一个视图时,他们可以购买IAP,然后当用户单击“后退”按钮时,我希望视图“刷新”,以显示此购买现在已激活 如何刷新视图 提前感谢任何视图都可以通过在该视图上调用setNeedsDisplay来显式刷新。 此外,您不应将术语UIViewController与UIView混淆 我想你没有刷新问题,你只会在自我编程的自定义视图。我很抱歉相关视图的数据没有更新。您有几个选择。

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

如何刷新视图


提前感谢

任何视图都可以通过在该视图上调用
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方法中,它会保留原始视图,但会在顶部添加一个新的集合,这在逻辑上是有意义的,但在这种情况下,它会让我发疯,我感谢您的帮助和耐心。