2014-01-27 94 views
1

我是iOS開發新手。我有一個非常簡單的UIViewController,在視圖中有兩個按鈕。我允許用戶編輯UI組件或從一個地方拖放到另一個地方。現在我想實現重置功能,允許用戶將UI重置爲原始階段,放棄所有更改。如何重置或重新啓動UIViewController的根視圖到其原始狀態?

正如在幾個職位試圖setNeedsDisplay中提到,但看起來像它不正確的方式來實現這一點。我的選擇是什麼?

例如在Android世界中,您可以完成當前Activity(等同於UIViewController)並重新啓動自己以實現原始狀態。是否可以在iOS中做類似的事情?

- (IBAction)resetButtonClicked:(id)sender { 
    // Now I want discard all the changes on the screen 
    // On some button click or specific action from user. 

    // Tried calling setNeedsDisplay as pointed in few others answers but somehow 
    // setNeedsDisplay does not reload my ViewController. 
    // [self.view setNeedsDisplay]; 
    } 
+1

爲什麼你設置android標籤? –

+0

你還有問題嗎?你不接受任何答案?讓我們知道你發生了什麼事? – Omarj

回答

0

我能想到的兩個選項:

1-保存你的初始狀態的位置,當用戶點擊復位按鈕,只是把它們的初始狀態這些按鈕。 (或奇怪的做法),你可以初始化你所在的同一個控制器,並從它本身提供它,這應該在某種程度上接近你的android方法。你會得到它的初始狀態相同的控制器(如果您沒有沒有解僱的第一個,你應該)

希望幫助:)

+0

謝謝選項1肯定會有助於職位,但如果視圖背景發生變化或編輯了一些文本,它將會失敗。因此考慮選項2 – kodeshpa

1

我已經做了類似的事情。我做的是:

1)爲每個框架創建本地CGRect變量ui控制即CGRect originalFrame1; 2)獲得每個UI控件的原始幀位置並將它們存儲在viewDidLoad上,即originalFrame1 = _frame1.frame;

3)關於resetButtonClicked設置它回到原始位置_frame1.frame = originalFrame1;

0

您可以在主視圖中保存所有子視圖(按鈕,標籤,...)的位置。

self.view.subview它將返回數組包含u有它:)

所有元素和當u想休息,你的觀點剛剛得到從陣列中的每個子視圖的老位置。

NSArray *arrayOfView = [view subviews]; 
//also: 
NSMutableArray *mutableArrayOfView = [[view subviews] mutableCopy]; 

for (UIImageView *imageView in imageViewArray) //uiimageview or whatever your subview //is you can check by using isKindofClass. `if ([view isKindOfClass:[UIImageView class]])` 
{ 
    //let's set frame for image view before adding to 
    [myimageView setFrame:imageview.frame];//or something like that 

} 
+0

這聽起來很有趣,它肯定會將視圖設置爲其原始位置,但如果文本或其他事物發生了變化。更確切地說,想要實現丟棄功能。 – kodeshpa

0

每個應用程序都將有一個keyWindow對象,你應該分配一定的viewController顯示。

window.rootViewController = [[UIViewController alloc] init];

比方說你的控制器類是CustomViewController

因此,在您的應用程序委託,didFinishLaunchingWithOptions,你會寫

self.window。rootViewController = [[CustomViewController alloc] init];

而當你點擊重置按鈕是如下調用的函數,

-(void)reset{ 
    // reset the view with default 
    self.view.window.rootViewController = [[CustomViewController alloc] init]; 

} 

如果你按照上面的代碼,它不會有任何內存泄漏,因爲,當您再次,設定RootViewController的舊的會丟失並從記憶中刪除。

+0

謝謝,它適用於未從筆尖加載的視圖。我試着做同樣的事情,但它給了我下面的異常'NSInternalInconsistencyException',原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加載了「ViewController」筆尖,但沒有設置視圖插座。 – kodeshpa

+0

我試圖與viewcore與筆尖連接並有outlet.It完全正常工作對我來說。你的代碼可能會有一些其他的插座問題。斷點並進行調試。 – santhu

+0

你有一些代碼示例,我可以參考。我現在試着沒有收到任何錯誤,但現在只是顯示空白窗口。 – kodeshpa

相關問題