0

我是IOS編程的新手,目前我有一個帶有兩個選項卡的標籤欄應用程序。我有兩個問題。交換/視圖之間的轉換iOS編程

第一個標籤顯示地圖,用一些圖釘想象它。導航欄上有一個按鈕,當點擊這個按鈕時,我希望地圖視圖能夠移出並且可以進入列表視圖。您可以從圖像中看到UI。該按鈕被稱爲列表。

現在,當我點擊列表我想這個觀點走開,列表視圖進來,所以這裏是我的問題嗎?

1)我該怎麼做?我嘗試了導航模型,但我不想那樣做,因爲我不想要後退按鈕。我嘗試製作兩個不同的視圖,並將按鈕拖到該視圖,但應用程序崩潰。我只想要點擊按鈕上的列表按鈕,點擊後視圖變爲列表視圖,按鈕文本變爲地圖。所以,現在如果我再次點擊按鈕,它應該返回到地圖視圖,並且按鈕更改爲列表。

2)我如何實現這個動畫?我見過一些應用程序頁面翻轉,我看到一些選項,如減少不透明度等,但我想實現翻轉動畫。

謝謝你給我的幫助。對此,我真的非常感激。

回答

0

閱讀您的意見後,我想知道......如果你的應用程序的結構,在邏輯上是一個標籤式的應用程序結構(如你確實把它稱爲一個「標籤欄應用程序」),你不應該考慮使用UITabViewController而不是NavigationController?畢竟,這是它設計的目的。

如果你使用TabViewController你應該重新考慮你的翻頁動畫的願望,因爲這並不真正使標籤的UI感。如果你可以放棄翻頁動畫,TabViewController可能是一個很好的方法,你至少應該在解散這個想法之前進行實驗。它也被設計用於增長......您可以在選項卡欄中包含任意數量的選項卡。 Check out the apple docs (with pictures!)

您會注意到標籤位於屏幕的底部,而您的'標籤'navController按鈕位於屏幕頂部的導航欄中。隨着應用程序的增長,這也會有所幫助,因爲從UI設計的角度和編程方面來看,它很簡單 - 將navControllers作爲導航工具合併到各個選項卡中。例如,如果您的地圖/列表翻轉例程確實對您的應用的此部分有意義,則可以將其保存爲單個選項卡(在其自己的navigationController中),併爲該應用的其他部分添加其他選項卡...

更新
從你的評論,你說你有興趣在navController - 內 - tabBarController設置。在這種情況下,這裏有一些方法可以得到翻轉過渡和沒有後退按鈕..

(1)模式呈現 最簡單的方式得到你想要的是設置您的viewControllers之一(比如地圖視圖)以模態方式呈現另一個(列表視圖)。

如果故事板:

  • 嵌入您的MapViewController在navController與導航欄按鈕,導航到ListView在您的圖片
  • 您listViewController添加到故事板和嵌入它在它自己的navContoller (不是mapViewController的navController)。將barButtonItem拖動到此navController並將它連接到listViewController中的IBAction中。CTRL-從mapViewController的'list'按鈕拖動到listViewController以創建一個segue。選擇segue並在屬性檢查器中將segue類型設置爲'modal',並檢查轉換'水平翻轉'和'動畫'。給它一個名字,以防你想在代碼中引用它。
  • 在listViewController的IBAction爲補充一點:
    [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];

這應該實現你的結果。您可以使用完成塊將信息從列表視圖發送回地圖視圖,和/或將地圖視圖設置爲listView的代表。

如果您使用的不是故事板檢查這個蘋果直營店

Presenting View Controllers from Other View Controllers
尤其是「呈現一個視圖控制器,並選擇一個過渡式」。

這種方法有一個問題 - 當呈現的視圖翻轉到屏幕上時,包括標籤欄在內的整個以前的視圖會被翻轉過來。這個想法是,這是一個模式視圖,其中用戶是要求要在應用程序中做任何其他事情之前解僱。

(2)PUSH/POP單一navController如果這個不適合你的意圖,你可以導航使用單一NavigationController向推送和意見爆裂,你可以隱藏後退按鈕。 ..但你真的需要保持後退按鈕的功能,因爲你想返回到mapView,而不是到一個新的地圖視圖。

要隱藏後退按鈕嘗試:

 self.navigationItem.hidesBackButton = YES 

在最上面的viewControllers' viewDidLoad

然後你就可以添加一個barButtonItem在廈門國際銀行/故事板,用這種IBAction爲的:

[self popViewControllerAnimated:NO] 

[self popToRootViewControllerAnimated:NO] 

你將不得不構建代碼的翻轉動畫,因爲它是不支持作爲內置有UINavigationController的(最好留給作爲練習讀者!)

單一的viewController(3)交換意見作爲ghettopia曾建議,你可以使用一個navController內單一的viewController(或用手動方式將導航欄)和swap,周圍用UIView類方法
transitionFromView:toView:duration:options:animations:completion
transitionWithView:duration:options:animations:completion兩種觀點。

這可能是一個很好的簡化解決方案,因爲您的列表和地圖本質上是同一數據模型的兩個視圖。

+0

你好,他是。感謝您的回答,這是非常豐富的。目前還有其他幾個選項卡。我剛剛展示了應用程序早期階段的屏幕截圖。 其他標籤基本上用於其他任務,如儀表板,上傳圖片等,所以我使用的標籤。地圖和列表顯示相同的數據,只是在不同的方法,因此我沒有看到有一個選項卡的原因,因爲標籤用於完全不同的活動,它不是標準的應用程序會嗎? –

+0

好的,翻轉動畫很好,不是最重要的。事情是如果我使用導航控制器。地圖頁面有一個列表按鈕。我點擊它,它會進入列表頁面。沒事兒。但是現在在列表頁面上,出現了一個我不想出現的後退按鈕。我想在該位置有一個按鈕,這對地圖和列表頁面都是通用的。在右側,我會看到一個按鈕,指出點擊地圖後會返回到地圖頁面。這可能嗎 ? 我希望我很清楚,並感謝您花時間幫助我。 –

+0

@ShawnFrank,看到我更新的答案,希望對你有所幫助 – foundry

1

Interface Builder可以完成大部分工作。按住控制鍵並將View Controller的UIBarButtonItem標題拖到您的列表視圖控制器中,然後選擇Action Segue「modal」。出現一個箭頭代表賽鴿;點擊它並使用屬性檢查器將轉換更改爲「水平翻轉」。 Here's a video

或者,您可以用presentViewController:animated:completion以編程方式進行此操作。

現在要回到列表中的地圖,我相信必須以編程方式完成。創建一個調用dismissViewControllerAnimated:completion:的方法,並讓你的列表View Controller的名爲「Map」的UIBarButtonItem觸發它。

+0

其中大部分工作正如你所建議的那樣感謝你。我有幾個意見/問題。 - 由於這是一個選項卡式應用程序,我將有其他選項卡。如果我使用您在進入列表頁面時提到的方法,我無法再看到該選項卡。我使用了相同的技術從列表視圖返回到地圖視圖,並返回,但該選項卡再次消失。動畫和轉換工作,但標籤欄消失。 謝謝 –

+0

UIView類方法[transitionWithView:duration:options:animations:completion](http://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#// apple_ref/occ/clm/UIView/transitionWithView:duration:options:animations:completion :)可以動畫交換一個視圖的另一個視圖。討論部分有一些示例代碼;您可以指定在「動畫」塊中添加和刪除哪些子視圖。 –