68

アプリケーションにを追加しましたUISegmentedControl。通常の状態では、どのボタンも選択されていません。最初のセグメントが選択されたときにボタンクリックイベントを実装し、別のボタンがクリックされたときに別のイベントを実装したいと思います。

4

8 に答える 8

133

私があなたの質問を正しく理解している場合は、UISegmentControlのリファレンスドキュメントに示されている例とまったく同じように、定数のターゲットアクションメソッド(の親クラスでサポートされている)UIControlを実装する必要があります。UISegmentedControlUIControlEventValueChanged

すなわち

[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で使用されるターゲットアクションセレクターの標準タイプです。

于 2010-06-15T21:47:11.127 に答える
69

これを試して:

- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
      NSInteger selectedSegment = sender.selectedSegmentIndex;

      if (selectedSegment == 0) {

      }
      else{

      }
    }
于 2013-01-02T15:40:35.190 に答える
12

迅速に更新されたシンプルなバージョン

func loadControl(){
     self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
}

func segmentSelected(sender: UISegmentedControl)
{
    let index = sender.selectedSegmentIndex

    // Do what you want
}
于 2016-06-09T15:05:12.433 に答える
9

これを試してみてください

    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
    }

お役に立てば幸いです

于 2010-06-15T22:13:33.437 に答える
7

セレクターはメソッドと正確に一致する必要がありますが、実際のパラメーターは一致しないことに注意してください。

@selector(action)
    => -(void) action { ..code.. }

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

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

これは私を最も長い間混乱させました、そしてそれは以前の答えから完全に明確ではありません。

于 2012-10-08T21:28:30.193 に答える
6

SWIFTの場合は、次を使用します。

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)
}
于 2015-03-03T19:05:26.663 に答える
4

このように単純な場合、このアクションを機能させるには、ストーリーボードを使用してViewControllerに対してアクションを実行する必要があります。

- (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;
    }
}
于 2014-06-03T22:46:44.403 に答える
2

IBのハンドラーを値変更イベントにアタッチできます:UIControlEventValueChanged

または、コードでそれを行うことができます:

[segmentedControl addTarget:self
                     action:@selector(action:)
           forControlEvents:UIControlEventValueChanged];
于 2010-06-15T21:45:00.223 に答える