Невозможно переключаться между сегментами для UISegment Control - PullRequest
1 голос
/ 29 февраля 2012

Ниже приведен фрагмент кода, который я использую для настройки моего UISegment Control

//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

Какой-нибудь совет, как я могу это исправить?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Это выглядит как проблема границ.Содержащий вид имеет границы {0, 0, 320, 30}, в то время как сегментированный элемент управления имеет {-8, 44, 336, 30}.Это означает, что сегментированный элемент управления технически находится «вне» своего содержащего представления, и тест нажатия iOS не будет регистрировать касание.

Попробуйте не устанавливать рамку сегментированного элемента управления (временно закомментируйте строку tempSegmentControl.frame = CGRectMake(-8, 44, 336, 30);) и посмотрите,случается.

2 голосов
/ 29 февраля 2012
  1. Убедитесь, что userInteractionEnabled имеет значение TRUE для вашего представления, buttonContainer и управления сегментами.

  2. Убедитесь, что границы суперпредставления buttonContainer достаточно широки и высоки, чтобы полностью вместить buttonContainer. Если это не так, то тестирование попаданий не сработает, а сегментированный элемент управления не получит никаких касаний.

...