アプリケーションにを追加しましたUISegmentedControl
。通常の状態では、どのボタンも選択されていません。最初のセグメントが選択されたときにボタンクリックイベントを実装し、別のボタンがクリックされたときに別のイベントを実装したいと思います。
8 に答える
私があなたの質問を正しく理解している場合は、UISegmentControlのリファレンスドキュメントに示されている例とまったく同じように、定数のターゲットアクションメソッド(の親クラスでサポートされている)UIControl
を実装する必要があります。UISegmentedControl
UIControlEventValueChanged
すなわち
[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で使用されるターゲットアクションセレクターの標準タイプです。
これを試して:
- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
NSInteger selectedSegment = sender.selectedSegmentIndex;
if (selectedSegment == 0) {
}
else{
}
}
迅速に更新されたシンプルなバージョン
func loadControl(){
self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
}
func segmentSelected(sender: UISegmentedControl)
{
let index = sender.selectedSegmentIndex
// Do what you want
}
これを試してみてください
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
}
お役に立てば幸いです
セレクターはメソッドと正確に一致する必要がありますが、実際のパラメーターは一致しないことに注意してください。
@selector(action)
=> -(void) action { ..code.. }
@selector(action:)
=> -(void) action:(id)sender { ..code.. }
@selector(action:forEvent:)
=> -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }
これは私を最も長い間混乱させました、そしてそれは以前の答えから完全に明確ではありません。
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)
}
このように単純な場合、このアクションを機能させるには、ストーリーボードを使用して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;
}
}
IBのハンドラーを値変更イベントにアタッチできます:UIControlEventValueChanged
または、コードでそれを行うことができます:
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];