2015-01-20 19 views
0

我正在開發一個需要身份驗證到後端的iOS 8應用程序。我想以這樣一種方式製作應用程序,如果應用程序收到HTTP 403錯誤,用戶會看到一個登錄屏幕。在登錄屏幕視圖控制器成功認證用戶後,應用程序應該導航回到前一個屏幕(無論它是什麼屏幕)。導航到iOS上的前一個場景8

在Xcode 6中,我可以看到在場景之間導航的首選方式是通過segse。因此,我用塞格斯導航從登錄屏幕的背面,使用此代碼:

[self performSegueWithIdentifier:@"UnwindToNewsfeed" sender:self]; 

,這提出的問題是,我將不得不建立塞格斯到應用程序中的所有場景,其中的任何可能會觸發認證請求。因此,我想問一個推薦的方法來實現這個導航要求。

我是新來的iOS8和一般的iPhone編程,所以它可能是我沒有完全清楚iOS 8的導航概念,我使用了一種錯誤的方法。

回答

1

展開細分與前進細分不同,這使得支持後續功能非常簡單。

在創建展開segue之前,您需要向視圖控制器添加一個方法,以便將其展開。例如 -

- (IBAction)unwindFromLogin:(UIStoryboardSegue*)sender { 
} 

(如果要觸發與performSegueWithIdentifier開卷或場景中的UIViewController對象),並在退出圖標即可創建按Ctrl拖動場景中的物體之間的開卷SEGUE屏幕的底部。然後界面生成器將顯示它找到的符合上述簽名的方法列表(因此它將顯示unwindFromLogin:)。你可以給這個segue一個標識符,這樣你可以像平常一樣用performSegueWithIdentifier來調用它。到現在爲止還挺好。

現在,爲聰明的一點。在運行時,調用unwind segue時,iOS將通過當前視圖控制器堆棧查找實現指定方法的第一個視圖控制器 - 因此,如果在每個視圖控制器中實現相同的unwindFromLogin:方法,則您的登錄視圖將展開爲它來自的視圖控制器,你只需要在你的登錄視圖控制器場景中放置一個簡單的細節。

Apple有一個很好的Tech Note,它更詳細地描述了展開過程,以及如何通過在UIViewController子類中實現其他方法來定製它,但默認實現應該適合您的需求。

如果你不想創建從每個源視圖控制器登錄視圖控制器賽格瑞你可以直接使用類似目前它 -

LoginViewController *loginVC=(LoginViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"loginVC"]; 
[self presentViewController:loginVC animated:YES completion:nil]; 

你仍然可以使用回捲SEGUE找回

+0

謝謝你們的全面解答。謎題仍然缺少的是,我如何實現從每個屏幕到登錄屏幕的導航?我是否必須從每個場景向登錄場景建立IB連線,還是有一種更容易的,程序化的方式將這種行爲構建到場景中? – 2015-01-20 22:05:58

1

我不認爲使用segues總是最好的方法。在這種情況下,使用-popToViewController:animated:可能會更好。

這就是說,使用放鬆功能仍然可以在這裏工作。我建議創建一個自定義視圖控制器,它的子類爲UIViewController。此視圖控制器實現您的-unwindXXX:方法。

@interface MYBaseViewController : UIViewController 
- (IBAction)unwindXXX:(UIStoryboardSegue *)sender; 
… 
@end 

讓所有可以從登錄視圖控制器解開的視圖控制器繼承此自定義視圖控制器。

@interface MYNewsFeedViewController : MYBaseViewController 
… 
@end 
0

我認爲下面的兩個答案是有效的,我都投了給他們。

但是,經過測試,我發現這種方法對我的場景來說更簡單和麻煩。

在可以觸發登錄提示任何屏幕,我強制登錄屏幕通過調用下面的方法來呈現:

LoginViewController *loginView = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginView"]; 
[self presentViewController:loginView animated:YES completion:nil]; 

然後,爲了使成功後用戶所需的後退導航功能驗證的登錄界面,登錄界面調用這個方法,它返回到預覽場景:

[self dismissViewControllerAnimated:YES completion:nil]; 

由於我是新來的iOS開發,我不知道這是繼推薦的做法,所以我像人們對w發表評論不管這是不是推薦的方法。

相關問題