Как обнаружить изменения в 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
, и ваш код будет работать в это время. Благодаря