2013-03-25 89 views
1

我有4個UIBarButtons,當點擊時顯示PopoverController。根據點擊哪個按鈕,我必須顯示不同的彈出內容,這必須在PopoverController的viewDidLoad方法中完成。檢測哪個UIBarButton從其他ViewController被點擊

這是我如何處理從UIBarButton點擊的彈出窗口。在(VC1.m)

[PopoverController presentPopoverFromBarButtonItem:[self.navigationItem.rightBarButtonItems objectAtIndex:[self.navigationItem.rightBarButtonItems count] -1] 
           permittedArrowDirections:UIPopoverArrowDirectionAny 
               animated:YES]; 

我想提出的條件在viewDidLoad中,(PopoverController.m)

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    if ([super.navigationItem.rightBarButtonItems objectAtIndex:[self.navigationItem.rightBarButtonItems count] -1]) { 
     // Trigger method# 1 
    } 
    else { 
     // Trigger method# 2 
    } 
} 
+0

你有沒有想過只是讓這一個參數自定義'在它:'你的PopoverController的方法?這樣你就可以調用'-viewDidLoad'。 – gaige 2013-03-25 18:59:23

+0

感謝gaige。不,我沒有想過這個。你能解釋一下嗎? – 2013-03-25 19:34:52

回答

1

我建議增加一個屬性,你會成爲初始選項卡狀態使用。基本上如下:

@property NSInteger tabState; 

然後你可以在初始化之後或者在init函數中設置它。

假設PopoverController在上面的代碼是你被實例化某處的UIPopoverController一個子類,你可以更改初始化函數(通常– initWithContentViewController:– initWithContentViewController:tabState:,然後通過在你的調用初始化期間的標籤狀態:

-viewDidLoad方法
– initWithContentViewController:(UIViewController*)vc tabState:(NSInteger)newTabState 
{ 
    self = [super initWithContentViewController: vc]; 
    if (self) { 
     self.tabState = newTabState; 
    } 
    return self; 
} 

然後,您可以直接觸發了你self.tabState的,你有沒有緊密結合現有視圖的狀態信息。

+0

謝謝我現在正在處理它。 – 2013-03-25 19:59:44

+0

顯然我的代碼有initwithContentViewController,但PopoverController不是PopoverController的子類,因此我不能在那裏放置一個方法。我還能在哪裏放置自定義方法? – 2013-03-25 21:37:40

+0

您可以隨時將該屬性添加到您的課程並在創建實例後進行設置。我的原始答案也提到了這一點。 – gaige 2013-03-25 22:19:52