Как обнаружить изменения в UISegmentedControl из отдельного IBAction

У меня есть кнопка UISegmentedControl с тремя сегментами. В ViewController.m это работает очень хорошо - нажатие кнопок вызывает правильные методы.

У меня есть еще один отдельный UIButton, который, когда он нажимается, должен сначала ПРОВЕРИТЬ состояние UISegmentedControl (чтобы увидеть, какая кнопка нажата в данный момент), а затем запустить метод в соответствии с этим значением сегмента.

Вот мой код для этого отдельного UIButton. Сама кнопка работает, но я не могу понять, как получить текущее значение сегмента UISegmentedControl.

Большое спасибо за любую помощь здесь. Я новичок в OBJ-C. Я знаю, как это сделать в VisualBasic, поэтому ответы, которые находятся на более многословной стороне, были бы наиболее оценены, поскольку мне нужно знать "почему". Спасибо.

- (IBAction)decodeButton:(id)sender {
    UISegmentedControl *segment = [UISegmentedControl alloc];  // THIS DOES NOT WORK.

    if (segment.selectedSegmentIndex == 0) {
                decode(textToDecode);
    } else if(segment.selectedSegmentIndex == 1) {
                decode1(textToDecode);
    } else if(segment.selectedSegmentIndex == 2) {
                decode2(textToDecode); 
    }
}

Ответ 1

Здесь является учебное пособие с использованием UISegmentedControl в iOS.

Просто создайте объект Reference и правильно подключите его к файловому владельцу.

IBOutlet UISegmentedControl *segmentedControl;

Затем установите свойство

@property (strong, nonatomic) IBOutlet UISegmentedControl * segmentedControl;

Синтезировать в .m файл

@synthesize segmentedControl;

Теперь вы можете получить доступ к выбранному индексу в любое время.

- (IBAction)decodeButton:(id)sender {

    if (segmentedControl.selectedSegmentIndex == 0) {
                decode(textToDecode);
    } else if(segmentedControl.selectedSegmentIndex == 1) {
                decode1(textToDecode);
    } else if(segmentedControl.selectedSegmentIndex == 2) {
                decode2(textToDecode); 
    }
}

Ответ 2

Ваш код alloc каждый раз UISegmentedControl в кнопке нажимает действие. Поэтому используйте следующий код для создания sUISegmentedControl и его действия.

 SegmentChangeView=[[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"Segment1",@"Segment2",@"Segment3",nil]];
    SegmentChangeView.frame=CGRectMake(5, 44, self.view.bounds.size.width-10, 33);
    SegmentChangeView.selectedSegmentIndex=0;
    SegmentChangeView.segmentedControlStyle=UISegmentedControlStyleBar;
    SegmentChangeView.momentary = YES;
    [SegmentChangeView setTintColor:[UIColor blackColor]];
    NSDictionary *attributes =[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13],UITextAttributeFont,nil];
    [SegmentChangeView setTitleTextAttributes:attributes forState:UIControlStateNormal];
    [SegmentChangeView addTarget:self action:@selector(SegmentChangeViewValueChanged:) forControlEvents:UIControlEventValueChanged];
    SegmentChangeView.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleBottomMargin;
    [self.view addSubview:SegmentChangeView];

-(IBAction)SegmentChangeViewValueChanged:(UISegmentedControl *)SControl
{
    if (SControl.selectedSegmentIndex==0)
    {
          decode(textToDecode);
    }
    else if (SControl.selectedSegmentIndex==1)
    {
            decode1(textToDecode);
    }
else if (SControl.selectedSegmentIndex==2)
    {
            decode2(textToDecode);
    }


}

Ответ 3

Вы должны удалить UISegmentedControl *segment = [UISegmentedControl alloc] ; из своего кода, поскольку он каждый раз выделяет новый экземпляр вашего UISegmentedControl, вместо этого

создайте для вас выход UISegmentController, например

@property (strong, nonatomic) IBOutlet UISegmentedControl * segment;

а затем в любой момент в вашем файле viewcontroller.m вы можете получить выбранный сегмент, используя

segment.selectedSegmentIndex;

Надеюсь, что это имеет смысл,

Привет

Ответ 4

Попробуйте это

- (IBAction)segmentedControlChanged:(id)sender
{
   UISegmentedControl *s = (UISegmentedControl *)sender;

   if (s.selectedSegmentIndex == 1)
   {
      //code
   }
   else
   {
      //code
   }
}

Ответ 5

Этот код означает, что вы создаете новый объект при каждом нажатии

 UISegmentedControl *segment = [UISegmentedControl alloc] ;

То, что вам нужно сделать, займет IBOutlet (Свойство) вашего segmentedControl, тогда я буду работать на вас. Не создавайте новый объект в методе кнопок. когда вы сделаете IBOutlet, он будет связан с segmentControl, и ваш код будет работать в это время. Благодаря