代码之家  ›  专栏  ›  技术社区  ›  Warrior

为uiSegmentedControl定义单击事件

  •  59
  • Warrior  · 技术社区  · 14 年前

    我增加了一个 UISegmentedControl 在我的申请中。在正常状态下未选择任何按钮。我想在选择第一个段时实现一个按钮单击事件,在单击另一个按钮时实现另一个事件。

    8 回复  |  直到 7 年前
        1
  •  126
  •   Xeaza    7 年前

    如果我正确理解您的问题,您只需实现一个目标操作方法(由 UIControl 哪个是 UISegmentedControl 的父类)。 UIControlEventValueChanged 与uiSegmentControl中给出的示例完全相同 reference documentation .

    [segmentedControl addTarget:self
                         action:@selector(action:)
               forControlEvents:UIControlEventValueChanged];
    

    用于具有以下签名的邮件:

    - (void)action:(id)sender
    

    [segmentedControl addTarget:self
                         action:@selector(action:forEvent:)
               forControlEvents:UIControlEventValueChanged];
    

    对于

    - (void)action:(id)sender forEvent:(UIEvent *)event
    

    [segmentedControl addTarget:self
                         action:@selector(action)
               forControlEvents:UIControlEventValueChanged];
    

    对于最简单的方法:

    - (void)action
    

    这是uikit中使用的标准类型的目标动作选择器。

        2
  •  65
  •   Berik    9 年前

    试试这个:

    - (IBAction)segmentSwitch:(UISegmentedControl *)sender {
          NSInteger selectedSegment = sender.selectedSegmentIndex;
    
          if (selectedSegment == 0) {
    
          }
          else{
    
          }
        }
    
        3
  •  9
  •   Sivanathan    14 年前

    试试这个,

        UISegmentedControl  * travelModeSegment = [[UISegmentedControl alloc] initWithItems:
        [NSArray arrayWithObjects:NSLocalizedString(@"Driving", nil),                 NSLocalizedString(@"Walking", nil), nil]];
        [travelModeSegment setFrame:CGRectMake(9.0f, 0.0f, 302.0f, 45.0f)];
        [cell addSubview:travelModeSegment];
        [travelModeSegment release];
    

    然后写一个动作,

         if (travelModeSegment.selectedSegmentIndex == 0) {
            //write here your action when first item selected
        } else {
            //write here your action when second item selected
        }
    

    我希望它能帮助你

        4
  •  7
  •   Jonathan    12 年前

    值得注意的是,选择器必须精确匹配一个方法,但没有实际的参数。

    @selector(action)
        => -(void) action { ..code.. }
    
    @selector(action:) 
        => -(void) action:(id)sender { ..code.. }
    
    @selector(action:forEvent:) 
        => -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }
    

    这让我困惑了很长一段时间,从先前的回答中也不太清楚。

        5
  •  6
  •   dy_    9 年前

    如需快速使用:

    segmentedControl.addTarget( self, action: "segmentSelected:", forControlEvents: UIControlEvents.ValueChanged )
    

    并实现这样的方法:

    func segmentSelected(sender: UISegmentedControl)
    {
        println("selected index: \(sender.selectedSegmentIndex)")
    }
    

    如果要在选择所选段时调用特定操作,请扩展uiSegmentedControl:

    class CustomSegmentedControl : UISegmentedControl
    {        
        override init()
        {
            super.init()
        }
    
        override init(frame:CGRect)
        {
            super.init(frame:frame)
        }
    
        required init(coder aDecoder: NSCoder) {
           super.init(coder: aDecoder)
        }
    
        func valueChanged(index:Int)
        {
             // ACTION GOES HERE
        }      
    }
    

    在SegmentSelected中调用“ValueChanged”,如下所示:

    func segmentSelected(sender: CustomSegmentedControl)
    {
        println("selected index: \(sender.selectedSegmentIndex)")
        sender.valueChanged(sender.selectedSegmentIndex)
    }
    
        6
  •  5
  •   Beninho85    7 年前

    更新了Swift中的简单版本

    func loadControl(){
         self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
    }
    
    func segmentSelected(sender: UISegmentedControl)
    {
        let index = sender.selectedSegmentIndex
    
        // Do what you want
    }
    
        7
  •  4
  •   rafaeljuzo    10 年前

    简单地说,您需要使用故事板对视图控制器进行操作,以便使此操作生效。

    - (IBAction)searchSegmentedControl:(UISegmentedControl *)sender
    {
        switch (sender.selectedSegmentIndex) {
            case 0:
                NSLog(@"First was selected");
                break;
            case 1:
                NSLog(@"Second was selected");
                break;
            case 2:
                NSLog(@"Third was selected");
                break;
            default:
                break;
        }
    }
    
        8
  •  2
  •   progrmr    14 年前

    可以将ib中的处理程序附加到值更改事件:uicontrolEventValueChanged

    或者你可以用代码来做:

    [segmentedControl addTarget:self
                         action:@selector(action:)
               forControlEvents:UIControlEventValueChanged];