13

我有一个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); 
    }
}
4

5 回答 5

19

这是在 iOS 中使用 UISegmentedControl的教程。

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

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); 
    }
}
于 2012-12-31T11:08:12.457 回答
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);
    }


}
于 2012-12-31T11:09:37.723 回答
3

您应该UISegmentedControl *segment = [UISegmentedControl alloc] ;从您的代码中删除,因为它每次都分配一个新的 UISegmentedControl 实例,而不是,

UISegmentController为你创造一个出口

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

然后稍后在viewcontroller.m文件中的任何位置,您都可以使用

segment.selectedSegmentIndex;

希望这是有道理的,

问候

于 2012-12-31T11:07:55.197 回答
2

像这样试试

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

   if (s.selectedSegmentIndex == 1)
   {
      //code
   }
   else
   {
      //code
   }
}
于 2015-10-05T10:44:23.427 回答
1

此代码意味着您在每次点击时创建一个新对象

 UISegmentedControl *segment = [UISegmentedControl alloc] ;

你必须做的事情拿走你的IBOutlet(财产)segmentedControl然后我会为你工作。不要在按钮方法中创建新对象。当您制作 IBOutlet 时,它将与 at 链接,segmentControl并且您的代码将在那时起作用。谢谢

于 2012-12-31T10:50:28.997 回答