0

しばらく取り組んできたことがあります。さまざまな種類の食べ物を一覧表示するUIPickerViewがあります。私の配列は次のようになります。

food = [[NSMutableArray alloc] init];
    [activities addObject:@"Pasta"];
    [activities addObject:@"Pizza"];
    [activities addObject:@"Spaghetti"];
    [activities addObject:@"Salad"];

そして私の画像配列は次のとおりです。

foodImages = [[NSMutableArray alloc] init];
        [activities addObject:@"Pasta.png"];
        [activities addObject:@"Pizza.png"];
        [activities addObject:@"Spaghetti.png"];
        [activities addObject:@"Salad.png"];

私が見つけようとしているのは、ユーザーがピッカービューからアイテムを選択したときに、ボタンの画像を変更できるかどうかです。したがって、UIPickerViewからパスタを選択すると、ボタンの画像が「Pasta.png」に変更されます。Xcodeでこれを達成するにはどうすればよいですか?

4

4 に答える 4

1

あなたは確かにそれを行うことができます。まず第一に、画像リンクと食べ物の名前を1つの配列に格納する方がはるかに優れています。これにより、アプリがよりスケーラブルになり、コードを変更してもエラーが発生する可能性が低くなります。

あなたはそのようにこれを行うことができます:

food = [[NSMutableArray alloc] init];
[food insertObject:[NSMutableArray arrayWithObjects:@"Pasta",@"Pasta.png",nil] atIndex:[food count]];
[food insertObject:[NSMutableArray arrayWithObjects:@"Pizza",@"Pizza.png",nil] atIndex:[food count]];

画像が名前と同じで、拡張子が.pngの場合、本当に2つのオブジェクトが必要ですか?


の画像を設定するUIPicker場合は、次のようにします(UIPickerViewDelegate.hに追加して、[self setPickerValue];表示したい場所に電話をかける必要がありUIPickerます。ボタンやテキストフィールドなど)。

-(void)setPickerValue {
    pickerActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil, nil];
    [pickerActionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
    CGRect pickerFrame = CGRectMake(0, 44, 0, 0);
    UIPickerView *valuesPicker = [[UIPickerView alloc] initWithFrame:pickerFrame];

    [valuesPicker setDataSource: self];
    [valuesPicker setDelegate: self];
    valuesPicker.showsSelectionIndicator = YES;
    [pickerActionSheet addSubview:valuesPicker];

    UIToolbar *controlToolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    [controlToolBar setBarStyle:UIBarStyleBlack];
    [controlToolBar sizeToFit];

    UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    UIBarButtonItem *setButton = [[UIBarButtonItem alloc] initWithTitle:@"Set" style:UIBarButtonItemStyleDone target:self action:@selector(dismissPicker)];
    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelPicker)];
    [controlToolBar setItems:[NSArray arrayWithObjects:cancelButton, spacer, setButton, nil] animated:NO];

    [pickerActionSheet addSubview:controlToolBar];
    [pickerActionSheet showInView:self.view];
    [pickerActionSheet setBounds:CGRectMake(0, 0, 320, 485)];
}
-(void)cancelPicker {
    [pickerActionSheet dismissWithClickedButtonIndex:0 animated:YES];
}
// Number of components.
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}
// Total rows in our component.
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return [food count];
}
// Display each row's data.
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return [[food objectAtIndex: row] objectAtIndex:0];
}

上記のコードは、ツールバーとして[キャンセル]ボタンと[OK]ボタンを備えた優れたピッカービューを作成します。必要な最後の関数は次のとおりです(UIButton「button1」という名前があると仮定します)。

-(void)dismissPicker {
    [button1 setImage:[UIImage imageNamed: [[food objectAtIndex:row] objectAtIndex:1]] forState:UIControlStateNormal];
    [pickerActionSheet dismissWithClickedButtonIndex:0 animated:YES];
}
于 2013-02-20T17:00:10.780 に答える
1

[yourButton setImage:[UIImage imageNamed:[foodImages objectAtIndex:0]] forState:UIControlStateNormal];// objectAtIndex 0は「Pasta.PNG」を返し、1はPizzaなどを返します。

于 2013-02-20T17:00:20.043 に答える
1

メソッドを実装しUIPickerViewDelegateます(docs):

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

    NSString *imageName = foodImages[row];

    [button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];

}

ピッカーの代理人を設定します。

pickerView.delegate = self;

次に、画像をXcodeプロジェクトに追加します(まだ追加していない場合)。

また、画像をさまざまな状態に設定したりsetBackgroundImage:forState、ボタンにテキストも必要な場合に使用したりすることもできます(詳細については、UIButtonのドキュメントを参照してください)。

于 2013-02-20T17:02:19.410 に答える
0

食べ物の名前がキーで、食べ物の画像ファイルが値であるNSDictionaryを使用します。次に、それが選択されたら、キーの値を画像としてロードするだけです。

2つの配列を使用したい場合は、選択した食べ物のインデックスを取得します。foodImages配列が食べ物の配列を反映している限り、objectAtIndexにその値を使用して画像を読み込むことができます。

于 2013-02-20T17:05:29.133 に答える