Как различить выбранный, невыбранный раздел на сегментированном контроллере - PullRequest
0 голосов
/ 26 мая 2011

Я использовал следующий код для создания сегментированного контроллера, но я не могу определить, какой из них выбран, а какой нет.Как я могу дифференцироваться?

UISegmentedControl *segmentedControl;
segmentedControl = [[UISegmentedControl alloc] initWithItems:nil];
                [segmentedControl insertSegmentWithTitle:@"Male" atIndex:0 animated:YES];
                [segmentedControl insertSegmentWithTitle:@"Female" atIndex:1 animated:YES];
                segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
                segmentedControl.frame = CGRectMake(100,10,200,30);
                [segmentedControl setMomentary:YES];
                [segmentedControl addTarget:self action:@selector(segmentSwitch:) forControlEvents:UIControlEventValueChanged];



- (void)segmentSwitch:(id)sender 
{
    segmentedControl = (UISegmentedControl *) sender;
    NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;
    UIView *firstView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20,20)];
    firstView.backgroundColor=[UIColor greenColor];
    UIView *secondView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20,20)];
    firstView.backgroundColor=[UIColor brownColor];
    if (selectedSegment == 0) 
    {
        NSLog(@"first segment");
        //toggle the correct view to be visible
        strGender =[[NSMutableString alloc]initWithString:@"Male"];
        [firstView setHidden:NO];
        [secondView setHidden:YES];
    }
    else
    {
        NSLog(@"second segment");
        //toggle the correct view to be visible
        strGender =[[NSMutableString alloc]initWithString:@"Female"];
        [firstView setHidden:YES];
        [secondView setHidden:NO];
    }
}

Ответы [ 4 ]

1 голос
/ 27 мая 2011

Здесь есть несколько вещей.На основании вашего комментария к ответу @ Surjit вам придется использовать insertSegmentWithImage:atIndex:animated, если вы хотите изменить цвет сегмента.Вам нужно будет иметь изображения для каждого сегмента как для выбранного, так и для невыбранного состояния.

Но в вашем методе segmentSwitch: есть несколько проблем.Вы создаете firstView и secondView, но не добавляете их в иерархию представлений.Вы устанавливаете цвет фона firstView дважды.Вы, вероятно, намеревались сделать один из вызовов secondView.И нет смысла изменять свойство hidden двух видов, пока они не отображаются на экране.Если вы хотите переключаться между двумя видами разных цветов, объявите их как ivars и инициализируйте их в другом месте, а затем переключите их hidden на сегментный переключатель.

0 голосов
/ 25 октября 2012
see this example here i am setting tint color for selected
and unselected segment index.

But before that please unchecked the momentary state from xib 
for UISegmentedControl.


- (void)segmentAction:(id)sender{
UIColor *tintcolor1=[UIColor colorWithRed:204/255.0 green:204/255.0 blue:204/255.0 alpha:1.0];
UIColor *tintcolor2=[UIColor colorWithRed:211/255.0 green:78/255.0 blue:65/255.0 alpha:1.0];

for (int i=0; i<[segment_controller.subviews count]; i++) 
{

    if ([[segment_controller.subviews objectAtIndex:i]isSelected] ) 
    {               

        [[segment_controller.subviews objectAtIndex:i] setTintColor:tintcolor2];
    }else
    {

        [[segment_controller.subviews objectAtIndex:i] setTintColor:tintcolor1];
    }


} 
0 голосов
/ 27 мая 2011

// Реализуем viewDidLoad, чтобы выполнить дополнительную настройку после загрузки представления, обычно из кончика. - (void) viewDidLoad { [super viewDidLoad];

self.view.backgroundColor = [UIColor redColor];

UISegmentedControl *segmentedControl;  // add this to your (.h) file

segmentedControl = [[UISegmentedControl alloc] initWithItems:nil];
[segmentedControl insertSegmentWithTitle:@"Red" atIndex:0 animated:YES];
[segmentedControl insertSegmentWithTitle:@"Green" atIndex:1 animated:YES];
[segmentedControl insertSegmentWithTitle:@"Blue" atIndex:2 animated:YES];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBezeled;
segmentedControl.frame = CGRectMake(0, 0, 320, 40);
segmentedControl.selectedSegmentIndex = 0;
segmentedControl.tintColor = [UIColor blackColor];
segmentedControl.backgroundColor = [UIColor blackColor];
[segmentedControl setMomentary:NO];   // imp property (change it & see magic)

[segmentedControl addTarget:self action:@selector(segmentSwitch:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:segmentedControl];

}

  • (IBAction) сегментSwitch: (id) отправитель { NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;

    if (selectedSegment == 0) self.view.backgroundColor = [UIColor blueColor]; еще если (selectedSegment == 1) self.view.backgroundColor = [UIColor greenColor]; еще если (selectedSegment == 2) self.view.backgroundColor = [UIColor redColor]; }

Просто скопируйте и вставьте этот код.

0 голосов
/ 26 мая 2011
UISegmentedControl *segmentedControl;

segmentedControl = [[UISegmentedControl alloc] initWithItems:nil];

segmentedControl.segmentedControlStyle = UISegmentedControlStyleBezeled;
segmentedControl.frame = CGRectMake(0, 6, 320, 40);
segmentedControl.selectedSegmentIndex = 0;
segmentedControl.tintColor = [UIColor blackColor];
segmentedControl.backgroundColor = [UIColor blackColor];

[segmentedControl setMomentary:YES];
[segmentedControl addTarget:self action:@selector(segmentSwitch:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:segmentedControl];

// вот код, как дифференцировать выделенный, невыбранный раздел на сегментированный // контроллер

int selectedSegment = segmentedControl.selectedSegmentIndex;

if(selectedSegment == 0)
{
 // code 1
}
else if(selectedSegment == 1)
{
 // code 2
}enter code here
...