我目前在viewDidLoad方法中構建了我的視圖,它添加了通過鏈接到另一個視圖的各種按鈕。我遇到的問題是,當用戶點擊按鈕並轉到其他視圖時,他們可以購買IAP,然後當用戶單擊後退按鈕時,我希望視圖「刷新」以顯示此購買現在變得活躍起來了。刷新UINavigationController中的視圖堆棧
如何刷新視圖?
在此先感謝
我目前在viewDidLoad方法中構建了我的視圖,它添加了通過鏈接到另一個視圖的各種按鈕。我遇到的問題是,當用戶點擊按鈕並轉到其他視圖時,他們可以購買IAP,然後當用戶單擊後退按鈕時,我希望視圖「刷新」以顯示此購買現在變得活躍起來了。刷新UINavigationController中的視圖堆棧
如何刷新視圖?
在此先感謝
任何視圖可以通過該視圖上調用setNeedsDisplay
明確地刷新。
此外,你不應該混淆條款UIViewController
與UIView
。
我asume你沒有刷新問題,你只會在自我編程的自定義視圖。我注意到相關視圖的數據沒有更新。
這似乎不工作,我已經在視圖中調用此方法將出現方法是這樣的:[self.view setNeedsDisplay]; – ChrisBratherton
我認爲你的一個子視圖需要更新。在viewWillAppear中調用needsDisplay是沒有意義的。但我認爲你的問題不是由刷新問題引起的,也許你的數據沒有更新。 – AlexWien
我已經確保我的數據在viewWillAppear中刷新。基本上我需要現在刷新按鈕視圖,以便購買它而不是顯示手錶。我將如何去刷新子視圖? – ChrisBratherton
您有幾個選項。要麼存儲是否進行了購買,然後運行檢查是否在您希望更改的視圖的viewWillAppear方法中進行購買的方法
或... 設置代理回調,在購買頁面上進行更改(http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-custom-delegates/)
或... 直接通過訪問來自導航控制器堆棧([[self.navigationController viewControllers] objectAtIndex:YOURVIEW])
構建視圖在viewDidLoad
因此您添加控件只有一次,但在viewWillShow
刷新。請記住,viewWillShow
將在版本完成viewDidLoad
後立即刷新它。因此,請在第一個viewController
上保留定義您的控件外觀的值,例如,在代表可變數組
在.M創建並啓動在AppDelegate.h
的NSMutableArray
和.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
將從您的委託數組中刷新它們。
也許'viewWillAppear'? – Thilo
這似乎構建了我對前一個視圖的看法,所以我得到了雙重? – ChrisBratherton
在viewWillAppear方法上,只需運行檢查購買是否已完成以便更改按鈕的文本的方法。你如何檢查以確認購買已經完成? –