2013-07-08 158 views
-1

我有一個視圖控制器,我需要自我刷新,所以我基本上用下面的代碼重新加載它。如何在這種情況下切換視圖控制器

-(void)check{ 
    GameController*myNewVC = [[GameController alloc] init]; 
    [self presentModalViewController:myNewVC animated:NO]; 
    } 

我可以調用該方法在上面gamecontroller,它工作正常,但在一個按鈕子類我使用下面的方法,它不工作,因爲沒有任何反應。

.H

@interface CellButton : UIButton { 
    } 

.M

GameController*myNewVC = [[GameController alloc] init]; 
     [myNewVC check]; 

我能做些什麼來得到這個工作?

+1

爲什麼創建一個全新的視圖控制器,當你可以告訴你必須刷新自己? – Caleb

+0

請定義「不起作用」 – jrturton

+0

按鈕類中有一個函數可以決定天氣否則視圖控制器將自行刷新它。我寧願這樣保持它的組織方面的原因。 –

回答

1

我有我需要刷新它自己這麼一個視圖控制器,我基本上重新加載它

不要那樣做。您的視圖控制器不是提醒自己,它正在取代自己,很難想到它應該需要這樣做的理由。

把代碼加載到一個單獨的方法中的數據,並在現有的視圖控制器上調用該方法,而不是創建一個全新的視圖控制器。例如,許多管理UITableView的視圖控制器會調用表的-reloadData方法來告訴表格放棄當前可見的任何單元格並請求新單元格。無論視圖控制器如何管理什麼樣的視圖,都可以做類似的事情。

我可以調用該方法在上面gamecontroller,它工作正常,但在 我用下面的方法的按鈕子類,因爲沒有任何反應它不工作 。

那是因爲你說你正在使用的代碼在一個UIButton子類,代碼表示,最有可能是:

[self presentModalViewController:myNewVC animated:NO]; 

所以,按鈕被告知自己目前的視圖控制器。但是,UIButton沒有presentModalViewController:animated:方法。我很驚訝,「什麼都沒有發生」 - 我期望由於未實現的方法而出現異常。如果你用指向視圖控制器的指針替換上面的self,它應該可以正常工作。或者,更好的辦法是將代碼放入視圖控制器的IBAction方法中,將按鈕操作設置爲該方法,並將其目標設置爲視圖控制器。

(從您的評論...)

有Button類的功能,這將決定天氣或不 視圖控制器將刷新它的自我。

這聽起來像一個糟糕的計劃 - 在設計良好的MVC應用程序中,控制視圖控制器是否刷新的邏輯屬於視圖控制器。讓視圖控制器根據任何條件控制刷新行爲來啓用/禁用或顯示/隱藏按鈕。

+0

爲了清楚起見,我刷新的控制器會自動加載它。好像有人將視圖控制器中的按鈕掛鉤到自身一樣。 –