2012-02-29 56 views
1

下面是我使用的設置我的UISegment控制無法爲UISegment控制段之間切換

//Add UIView below the nav bar 
UIView *buttonContainer = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 30)]; 

[self.view addSubview:buttonContainer]; 

//Set up segment control 
NSString *nicknameLabel = [NSString stringWithFormat:@"%@",self.nickname]; 

UISegmentedControl *tempSegmentControl = [[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:nicknameLabel,@"Friends", @"Everyone", nil]]; 
tempSegmentControl.frame = CGRectMake(-8, 44, 336, 30); 

self.segmentControl = tempSegmentControl; 
[self.segmentControl setWidth:112 forSegmentAtIndex:0]; 
[self.segmentControl setWidth:112 forSegmentAtIndex:1]; 
[self.segmentControl setWidth:112 forSegmentAtIndex:2]; 
self.segmentControl.selectedSegmentIndex = 0; 
[self.segmentControl addTarget:self action:@selector(toggleControls:) forControlEvents:UIControlEventValueChanged]; 
[self.segmentControl setSegmentedControlStyle:UISegmentedControlStylePlain]; 

[self changeSegmentFontSize]; 

[tempSegmentControl release]; 
[buttonContainer addSubview:self.segmentControl]; 
[self.view bringSubviewToFront:buttonContainer]; 
[buttonContainer bringSubviewToFront:self.segmentControl]; 
[buttonContainer release]; 

不過的代碼片段,我在應用程序中,我無法爲分段段之間進行切換控制。 (只顯示默認的第一個段高亮顯示)

enter image description here

我如何能解決這個問題有什麼建議?

+0

確保您的容器足夠大以容納分段控件。即如果您打開容器的剪輯,則分段的控件是否被裁剪?裁剪好的區域(即使關閉裁剪以使它們可見)也不會接收觸摸事件 - 除非您爲容器的'hitTest:withEvent:'方法實現了特殊代碼,否則......另外 - 請確保您的'segmentControl'已啓用。 – Sam 2012-02-29 18:58:35

+0

你爲什麼要添加另一個uviewview子視圖?您可以直接將uisegmented控件添加爲子視圖。 – shawnwall 2012-02-29 18:59:48

回答

3

它看起來像一個邊界問題。包含視圖的邊界爲{0,0,320,30},而分段控件的邊界爲{-8,44,336,30}。這意味着分段控件在技術上位於其包含視圖之外,並且iOS命中測試不會註冊觸摸。

嘗試不設置分段控制的幀(暫時註釋掉tempSegmentControl.frame = CGRectMake(-8, 44, 336, 30);行)並查看會發生什麼。

+0

是的。謝謝!我改變了界限,現在它起作用了。再次感謝 – Zhen 2012-02-29 19:37:28

2
  1. 檢查您的視圖,buttonContainer和段控件的userInteractionEnabled設置爲TRUE。

  2. 檢查buttonContainer的超級視圖的邊界是否寬且足夠高以完全包含buttonContainer。如果他們不是那麼命中 - 測試不會工作和分段控制不會得到任何接觸。