2014-10-05 169 views
1

我想在地圖視圖和控制器之間創建一個segue。但是,按住Ctrl鍵並嘗試在地圖視圖和控制器之間建立連接不起作用。我看到有人說你可以通過使用performSegueWithIdentifier以編程方式調用它,但我甚至不能創建一個segue來爲它分配一個標識符,以便稍後可以調用它。如果什麼都沒有解決,我只是要創建一個隱藏的按鈕,讓一個segue,並調用在地圖視圖點擊segue。但是,如果沒有這種做法,我想知道。無法從MapKitView繼續到控制器

+2

要創建一個可以以編程方式調用的segue,請按住Ctrl鍵並從視圖控制器圖標拖動到目標場景。你不能從MKMapView啓動一個segue,因爲它不支持動作 – Paulw11 2014-10-05 07:46:02

+0

我要在這裏討論主題。爲了模擬點擊動作,我應該爲它創建一個手勢識別器嗎? – Gasim 2014-10-05 07:50:14

+1

通常情況下,如果您使用輕擊手勢識別器,但是您可以嘗試它,那麼當有人點擊某個註釋時,您會觸發一個segue - 我認爲會有錯誤觸發的風險。 – Paulw11 2014-10-05 07:51:34

回答

1

首先了解您需要什麼樣的細節。可能你想用後退按鈕回到地圖。簡單的方法是將所有VC嵌入到導航控制器中。我們最後會這樣做。

讓ctrl +從第一個VC拖到第二個。確保你縮小了,你不是選擇了按鈕,而是選擇了整個VC。這樣我們就創建了手動節點。爲標識符提供一個合適的名稱,因爲我們需要稍後在代碼中引用它。

enter image description here

現在到了檢查器中設置所述標識符如上所述。確保你選擇了兩個VC之間的循環賽事。 enter image description here

然後進入第一個VC,ctrl +拖動放大後的地圖來設置一個動作。對於我的情況,我有一個名爲pop的按鈕,我將通過Ctrl +將其拖動到實現文件來設置操作。

之後,我希望用戶點擊POP,在你的情況下,地圖或標記,然後發射我們創建的segue。

的代碼是:

- (IBAction)pop:(id)sender { 
    [self performSegueWithIdentifier:@"push" sender:self]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if ([segue.identifier isEqualToString:@"push"]) { 
     //get the presenting vc here 
     id destionationVC=segue.destinationViewController; 

     //put some values to it 
     //destionationVC.value=2; //something; 

     //done 
    } 
} 

如果您現在嘗試運行,你會崩潰。因爲Push segues需要將UINavigationController作爲它的根視圖控制器。在這樣做的時候,我們會自動獲得一個後退按鈕。所以選擇第一個VC,在你的情況下,選擇MaPVC並選擇嵌入導航控制器。像這樣, enter image description here

然後運行該應用程序,然後通過單擊我的案例中的Pop來繼續。不過,如果適用的話,請使用這個概念。有什麼問題歡迎?

P.S performSegueWithIdentifier輪流調用您的-prepareSegue實現。如果你沒有實現這個方法,它會調用UIViewControllers -prepareSegue。那是一些繼承去那裏。無論如何,希望它有幫助。

+1

我接受這個答案,因爲我不知道可以創建手動遊戲。但是,您無法將操作添加到MapView,因此它們不能有segag。於是,我創建了一個手動segue,然後在MapView中添加了一個UITapGestureRecognizer,並向識別器添加了一個動作來執行segue。 – Gasim 2014-10-06 11:25:36