0

私は Xcode の初心者で、アプリのビルド中に問題が発生しました。私のアプリは、UILabel、UIPickerView、UISegmentControl で構成されています。ユーザーが UIPickerView で選択した行を変更するたびに、アプリが UILabel に異なる値を表示するようにしました。最初は、UILabel に表示する値のセットが 1 つしかありませんでしたが、最終的に 2 つ目のセットを追加しました。ユーザーがこれら 2 つのセットを切り替えることができるように、UISegmentControl を追加しました。これが私の「ifステートメント」の例です

- (void)pickerView: (UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

if (row == 0 && segmentController.selectedSegmentIndex == 0) {


    pickLabel.text=@"100 PPM";
}

else if (row == 0 && segmentController.selectedSegmentIndex == 1) {


    pickLabel.text=@"110 PPM";
}

else if (row == 1 && segmentController.selectedSegmentIndex == 0) {


    pickLabel.text=@"95 PPM";
}

else if (row == 1 && segmentController.selectedSegmentIndex == 1) {


    pickLabel.text=@"105 PPM";
}

問題は、セグメント コントロールが変更されたときではなく、UIPickerView で選択された行が変更されたときにのみ UILabel の値が変更されることです。たとえば、セグメント コントロール インデックスを変更すると、UIPicker の別の行に切り替えるまで UILabel は変更されません。セグメント コントロール インデックスが変更されたときに UILabel を強制的に変更する IBAction を作成したいと考えています。IBAction を「値が変更された」状態で UISegmentControl に接続します。IBAction に入れるコードが必要です。助けてください!

4

2 に答える 2

0

UISegmentedControl のイベントも登録する必要があります。

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

次のようなメソッドを作成します。

-(void) valueChanged:(UISegmetedControl *)control
{
    [self modifyLabel];
}

- (void)pickerView: (UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    [self modifyLabel];
}

-(void) modifyLabel
{
//Based on picker and segmented controller, update the label
}   
于 2013-06-20T09:03:30.443 に答える
0
- (void)pickerView: (UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

ピッカー値のみを変更すると実行されます。セグメントを変更するときは、メソッドを呼び出して、このメソッドで同じことを行う必要があります

これを試して

宣言する

NSInteger selectedRowInpicker;

と使用

-(IBAction)valueChanged
{
    if (selectedRowInpicker == 0 && segmentController.selectedSegmentIndex == 0) {


        pickLabel.text=@"100 PPM";
    }

    else if (selectedRowInpicker == 0 && segmentController.selectedSegmentIndex == 1) {


        pickLabel.text=@"110 PPM";
    }

    else if (selectedRowInpicker == 1 && segmentController.selectedSegmentIndex == 0) {


        pickLabel.text=@"95 PPM";
    }

    else if (selectedRowInpicker == 1 && segmentController.selectedSegmentIndex == 1) {


        pickLabel.text=@"105 PPM";
    }
}


- (void)pickerView: (UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    selectedRowInpicker =row;
    [self valueChanged];
}

valueChanged をセグメント アクション「value changed」に接続します。

于 2013-06-20T09:05:08.257 に答える