如何从单独的IBAction中检测UISegmentedControl中的更改

mst*_*ace 13 objective-c uisegmentedcontrol ios

我有一个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); 
    }
}
Run Code Online (Sandbox Code Playgroud)

Sib*_*ota 19

在iOS中使用UISegmentedControl的教程.

只需创建一个参考对象并将其正确连接到文件所有者.

IBOutlet UISegmentedControl *segmentedControl;
Run Code Online (Sandbox Code Playgroud)

然后设置属性

@property (strong, nonatomic) IBOutlet UISegmentedControl * segmentedControl;
Run Code Online (Sandbox Code Playgroud)

在.m文件中合成

@synthesize segmentedControl;
Run Code Online (Sandbox Code Playgroud)

现在您可以随时访问所选索引.

- (IBAction)decodeButton:(id)sender {

    if (segmentedControl.selectedSegmentIndex == 0) {
                decode(textToDecode);
    } else if(segmentedControl.selectedSegmentIndex == 1) {
                decode1(textToDecode);
    } else if(segmentedControl.selectedSegmentIndex == 2) {
                decode2(textToDecode); 
    }
}
Run Code Online (Sandbox Code Playgroud)


Sen*_*mar 6

您的代码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);
    }


}
Run Code Online (Sandbox Code Playgroud)