2012-06-08 73 views
2

如何在我的mapview(主控)控制器中檢測到詳細視圖控制器已被解僱?我有一個地圖視圖與引腳和註釋。當rightCalloutAccessoryView在任何註釋上被輕敲時,通過performSegueWithIdentifier調用模態細節視圖控制器。順便說一句,我不知道這是否正確,但主視圖控制器和詳細視圖控制器通過導航控制器連接。如何檢測視圖控制器何時被解散?

我的目標是根據詳細視圖控制器上的用戶操作,對mapview(主視圖)執行條件操作。特別是如果他們點擊了刪除引腳功能,我想在控制返回到地圖視圖時刪除引腳。如果他們只需點擊完成按鈕,然後我想要引腳和註釋保持在屏幕上。

由於我知識有限,我可以刪除下面第二行的引腳,但問題是我可以看到引腳和註釋在右側的CALLOUTAccessorView圖標被點擊之後並且在詳細視圖之前被刪除顯示。所以這意味着如果用戶點擊細節屏幕上的完成按鈕,他們將返回到地圖視圖,並且已經移除了引腳和註釋。我只希望在用戶點擊刪除按鈕時刪除它。

[self performSegueWithIdentifier:@"PinDetail" sender:self]; 
    [self.mapView removeAnnotation:MA]; 

所以我的問題真的是:

  1. 我在哪裏放在removeAnnotation代碼?在當前的位置,即使在詳細視圖出現之前,銷釘也會移除。
  2. 如何檢測詳細視圖上的刪除按鈕是否已被點擊?

謝謝。

+1

看到我下面的post.When用戶點擊刪除按鈕調用if([m_Target respondsToSelector:m_Selector]){[m_Target performSelector:m_Selector withObject:nil];}這是什麼,但你的removeAnnotation方法,並關閉細節view.And如果用戶按完成按鈕,然後只需關閉詳細視圖,而不必調用removeAnnotation.Got? –

+0

謝謝Nuzhat Zari。我會在早上更深入地探討這個問題。到目前爲止,我對於自己的進步感到非常滿意,但是我對obj-c的瞭解卻很少見。儘管我的代碼已經有一些委託代碼已經從各種來源複製過了,但是整個委託概念還沒有得到很好的處理。 – sftoparis

回答

2

您可以使用委託來根據詳細視圖中的操作對mapview執行操作。在performSegueWithIndentifier中,您可以將詳細視圖指定爲mapview的委託,並且它將爲您執行操作。

或者你可以設置目標和選擇的詳細信息視圖,當任何行動的細節視圖發生了,你可以調用選擇器,其目標是地圖視圖,如下所示: 1.In performSegue方法設定的目標如下:

[theController setTarget:self andSelector:@selector(performAction)]; 

其中,控制器是您的目標視圖控制器即細節視圖控制器。

2.In細節視圖控制器h文件

id m_Target; 
    SEL m_Selector; 

在細節視圖Controller.m或者文件:

- (void)setTarget:(id)inTarget andSelector:(SEL)inSelector 
{ 
    m_Target = inTarget; 
    m_Selector = inSelector; 
} 

3.Before駁回細節視圖呼叫

if ([m_Target respondsToSelector:m_Selector]) { 
      [m_Target performSelector:m_Selector withObject:nil]; 
     } 

4 。在地圖視圖控制器中定義performAction .m文件

+0

聽起來不錯。這兩種方式都足夠好用。 – Tarun

+0

謝謝@Nuzhat Zari。我終於弄明白了。我還使用了其他兩個非常有用的資源:http://www.raywenderlich.com/5191/beginning-storyboards-in-ios-5-part-2和http://www.youtube.com/watch?v = e5l0QOyxZvI – sftoparis

相關問題