2010-03-24 39 views
1

我想創建一些使用UIPopOverController的想法,我的意思是說,有那個語音氣泡錨點指向觸發該方法的按鈕。iphone - 在分段控件中獲取按鈕id

的問題是,我使用一個UISegmentedControl ...

如何獲取這是在一個UISegmentedControl拍了拍按鈕的ID,所以我能確定它的位置,併產生錨?

感謝您的任何幫助。

回答

3

請看UICatalog示例項目中的SegmentViewController.{h,m}

示例代碼使用代碼設置視圖。

此行

[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];

是神奇在哪裏發生。

- (void)segmentAction:(id)sender 
{ 
    //NSLog(@"segmentAction: selected segment = %d", [sender selectedSegmentIndex]); 
} 

你也可以這樣做在Interface Builder

假設你在你的ViewController和文件的所有者是你的ViewController,在UISegmentedControl單擊鼠標右鍵,使UIControlEventValueChanged之間的連接聲明(IBAction)segmentAction:(id)sender事件給文件所有者segmentAction

UISegmentedControl就像一個「單個」按鈕。它是一個放置在單個框架中的單個對象,與工具欄項目不同,後者是放置在其自己的框架中的一組對象。一個典型的使用模式是在您的segmentAction方法的switch語句內部發送消息。

我看到兩個選項。

選項A:實現包含UIButton控件數組的自定義視圖。 UITouchUpInside事件對所有按鈕的操作可以指向您的控制器中的相同方法。然後實現一個buttonPressed:(id)發件人,你可以要求發件人的框架和位置來創建你的新視圖。 - >複雜

選項B:您可以使用從selectedSegmentedIndex,widthForSegmentAtIndex:contentOffsetForSegmentAtIndex:計算的偏移量計算新子視圖的位置。與從任何視圖的界限進行計算確實沒有多大區別。 - >更容易

+0

嗨,感謝您的答案,但這似乎不工作,因爲我無法檢測到按鈕ID。這個「發件人」指向分段控件,而不是按鈕。想象一下你有一個UIToolBar。每個工具欄元素都是一個帶有自己編號的按鈕。這種分段控制是有幾個部門的事情,但每個部門似乎都不是一個ID ...至少不公開。沒有ID我不能檢索按鈕屬性,作爲位置,框架等,我可以從分段大小計算,但這不會是優雅的... :-( – SpaceDog 2010-03-24 14:41:16

+0

UISegmentedControl就像一個「單一」按鈕。它是一個放置在單個「框架」中的單個對象,與工具欄項目不同,它們是放置在自己框架中的一系列對象。 爲什麼您的控制器需要知道視圖的大小和位置詳細信息?認爲你的設計 'selectedSegmentIndex'告訴你選擇了哪個段。典型的使用模式是在'segmentAction'方法的'switch'語句中發送一條消息。 – falconcreek 2010-03-24 15:14:33

+1

當我重新閱讀您的問題時,我認爲答案是您不應該使用分段控件。您需要一個包含「UIButton」控件數組的自定義視圖。對於所有按鈕的「UITouchUpInside」事件的「操作」可以指向您的控制器中相同的方法。 – falconcreek 2010-03-24 15:19:14