1

私は IOS Programming: Big Nerd Ranch Guide Chapter 5 Silver Challenge に取り組んでおり、UISegmentedControl の変更イベントを接続しようとして頭を悩ませています。

Controller.m の初期化子には以下が含まれます。

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

Controller.m には以下も含まれます。

- (void) onChangeSegment:(id)sender
{
    NSLog(@"Phew made it!");
}

Controller.h には以下が含まれます。

@interface
//...

- (void) onChangeSegment:(id)sender;
@end

すべてが整っているように見えますが、アクティブ セグメントが UI から変更された場合、onChangeSegment はメッセージを送信されません。これは、シミュレータまたは私の iPhone4S (IOS7 および XCode 5) の場合です。

どんな助けや指示も大歓迎です。詳細を提供できる場合はお知らせください。

4

2 に答える 2

3

してください

NSLog(@"segmentedControl: %@", segmentedControl);

ターゲット アクションを追加する前に。addTarget: を nil オブジェクトにしようとしている可能性があります。Interface Builder を介してこれを行う場合、addTarget は -viewDidLoad: メソッドで行う必要があります。

サンプルアプリで行ったことは次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.segmentedControl addTarget:self action:@selector(change:) forControlEvents:UIControlEventValueChanged];
}

-(void)change:(UISegmentedControl *)control{
    NSLog(@"changed!");
}

セグメント化されたコントロールは IB を使用して作成され、View Controller のヘッダーにリンクされています。

于 2013-10-19T11:32:31.340 に答える