2011-04-25 62 views
6

只是對模態視圖控制器的使用感到好奇。何時以及爲什麼要使用它們?有沒有指導方針?爲什麼「現在的模態視圖控制器」?

我發現示例核心數據手冊代碼創建一個導航控制器只是爲了呈現一個模態視圖控制器。這是爲什麼?

UINavigationController *navController = [[UINavigationController alloc] 
               initWithRootViewController:addViewController]; 

    [self.navigationController presentModalViewController:navController 
           animated:YES]; 

是否有這樣的功能性原因?如果我們只是將addViewController推送到self.navigationController,它會起作用嗎?

回答

13

通常您使用模態視圖控制器將用戶的注意力集中在任務上。當你推動時,用戶處於某種導航流程中,但總體應用程序仍處於觸手可及的狀態。他們可能會決定前進還是後退,切換到中間的其他選項卡,無論如何。當他們得到一個模態視圖控制器時,他們不能做任何事情,直到任務完成或取消(模態視圖被解除)。

請參照why does this code use presentModalViewController? (not pushViewController)

11

是的,有指導方針。該iOS Human Interface Guidelines說:

使用模式的看法,當你需要 報價來完成與您 應用程序的主要功能 自足任務的能力。 A 模態視圖特別適合用於多步驟子任務 需要 UI元素不屬於 主應用程序用戶界面所有 的時間。

他們還表示,「交模態任務偶爾和簡單」:

如果可能的話,儘量少的人必須是一個模式 環境 次數來執行任務或 供應響應。 iOS應用程序 應該允許人們以非線性的方式與他們交互 。 Modality 通過中斷 人的工作流程並強制他們選擇特定的路徑來阻止這種自由。

模式是最合適的:

這是重要的是獲得了用戶的 關注。必須完成 (或明確放棄)的任務,以避免 將用戶數據留在不明確的狀態。人們讚賞 能夠在模態 視圖中完成 自包含子任務,因爲上下文轉移清晰且臨時性爲 。但是如果 子任務太複雜,人們可以忽略它們在進入模態 視圖時暫停的主要任務。當模式視圖爲全屏並且其 包括多個從屬視圖或 狀態時,此風險會增加。

保持模態任務相當短,並且 狹隘地集中。您不希望您的 用戶在 應用程序中體驗作爲 迷你應用程序的模態視圖。特別要警惕 創建一個涉及 視圖層次結構的模態任務,因爲人們可能會迷失,並忘記如何回溯其步驟 。如果模態任務 必須在不同的視圖中包含子任務,則必須爲 確保爲用戶提供單一的清除 通過層次結構的路徑,並避免 循環。

總是提供一個明顯而安全的方式 退出模態任務。人們應該總是能夠預測他們在工作時的命運,當他們解僱模態 視圖。

如果任務需要的 模式視圖的層次結構,請確保您的用戶 明白,如果他們在這下面的 頂級視圖點擊一個 完成按鈕會發生什麼。檢查任務以決定 下級 視圖中的「完成」按鈕是否應完成任務或整個任務的該視圖的 部分。 如果可能,請避免將Done 按鈕添加到從屬視圖,因爲 這種潛在的混淆。

1

從蘋果文檔

模態視圖控制器提供了有趣的方式來管理你的應用程序的流程。最常見的情況是,應用程序使用模態視圖控制器作爲臨時中斷,以便從用戶獲取關鍵信息。但是,您也可以使用模態呈現的視圖控制器在特定時間爲應用程序實現備用接口。

Modal View Controllers