2012-12-12 129 views
1

我目前在viewDidLoad方法中構建了我的視圖,它添加了通過鏈接到另一個視圖的各種按鈕。我遇到的問題是,當用戶點擊按鈕並轉到其他視圖時,他們可以購買IAP,然後當用戶單擊後退按鈕時,我希望視圖「刷新」以顯示此購買現在變得活躍起來了。刷新UINavigationController中的視圖堆棧

如何刷新視圖?

在此先感謝

+0

也許'viewWillAppear'? – Thilo

+0

這似乎構建了我對前一個視圖的看法,所以我得到了雙重? – ChrisBratherton

+0

在viewWillAppear方法上,只需運行檢查購買是否已完成以便更改按鈕的文本的方法。你如何檢查以確認購買已經完成? –

回答

0

任何視圖可以通過該視圖上調用setNeedsDisplay明確地刷新。
此外,你不應該混淆條款UIViewControllerUIView
我asume你沒有刷新問題,你只會在自我編程的自定義視圖。我注意到相關視圖的數據沒有更新。

+0

這似乎不工作,我已經在視圖中調用此方法將出現方法是這樣的:[self.view setNeedsDisplay]; – ChrisBratherton

+0

我認爲你的一個子視圖需要更新。在viewWillAppear中調用needsDisplay是沒有意義的。但我認爲你的問題不是由刷新問題引起的,也許你的數據沒有更新。 – AlexWien

+0

我已經確保我的數據在viewWillAppear中刷新。基本上我需要現在刷新按鈕視圖,以便購買它而不是顯示手錶。我將如何去刷新子視圖? – ChrisBratherton

0

您有幾個選項。要麼存儲是否進行了購買,然後運行檢查是否在您希望更改的視圖的viewWillAppear方法中進行購買的方法

或... 設置代理回調,在購買頁面上進行更改(http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-custom-delegates/)

或... 直接通過訪問來自導航控制器堆棧([[self.navigationController viewControllers] objectAtIndex:YOURVIEW])

0

構建視圖在viewDidLoad因此您添加控件只有一次,但在viewWillShow刷新。請記住,viewWillShow將在版本完成viewDidLoad後立即刷新它。因此,請在第一個viewController上保留定義您的控件外觀的值,例如,在代表可變數組

在.M創建並啓動在AppDelegate.hNSMutableArray和.H接口

NSMutableArray *yourArray; 

.M

添加屬性

@property (retain, nonatomic) NSMutableArray *yourArray; 

@synthesyze yourArray; 

發起進去。米

- (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" 

在yourArray第二viewController代碼更新值的地方說上a

-(void)viewWillDisappear:(BOOL)animated{ 

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

//run a loop and update all objects 

[appDelegate.yourArray replaceObjectAtIndex:i withObject:newObj]; 
} 

當您回到第一個viewController時,viewWillShow將從您的委託數組中刷新它們。

相關問題