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);
}
}
ここ はチュートリアルです 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);
}
}
あなたのコード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);
}
}
代わりに、UISegmentedControlの新しいインスタンスが毎回割り当てられるため、コードからUISegmentedControl *segment = [UISegmentedControl alloc] ;
を削除する必要があります。
UISegmentController
のようなアウトレットを作成します
@property (strong, nonatomic) IBOutlet UISegmentedControl * segment;
その後、viewcontroller.m
ファイルの任意の時点で、を使用して現在選択されているセグメントを取得できます。
segment.selectedSegmentIndex;
これが理にかなっていることを願っています、
よろしく
このようにしてみてください
- (IBAction)segmentedControlChanged:(id)sender
{
UISegmentedControl *s = (UISegmentedControl *)sender;
if (s.selectedSegmentIndex == 1)
{
//code
}
else
{
//code
}
}
このコードは、クリックするたびに新しいオブジェクトを作成していることを意味します
UISegmentedControl *segment = [UISegmentedControl alloc] ;
あなたがしなければならないことはあなたのIBOutlet
のsegmentedControl
(プロパティ)を取ることです、そして私はあなたのために働きます。 buttonメソッドで新しいオブジェクトを作成しないでください。 IBOutletを作成すると、segmentControl
にリンクされ、コードはその時点で機能します。ありがとう