13

3 つのセグメントを持つ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それから私はあなたのために働きます。buttonメソッドで新しいオブジェクトを作成しないでください。IBOutletを作成すると、でリンクされsegmentControl、コードはその時点で機能します。ありがとう

于 2012-12-31T10:50:28.997 に答える