iPhone - обновить ярлык от UIPickerView - PullRequest
2 голосов
/ 18 февраля 2010

У меня есть два UIPickerViews, настроенных на один вид под одним контроллером вида. Кажется, что сборщик заполнен ценностями, как и ожидалось. У меня также есть этикетка для каждого сборщика. Ярлык обновляется при каждом изменении значения, но значение, отображаемое на ярлыке, является неправильным. Он всегда выключен на 10. Коды ниже.

Интерфейс:

#import <UIKit/UIKit.h>
#import "InfoViewController.h"



@interface TransactionsViewController : UIViewController {

    //Deposit
    NSMutableArray *depositArray;
    IBOutlet UIPickerView *depositPicker;
    IBOutlet UILabel *depositLabel;

    //Send
    NSMutableArray *sendArray;
    IBOutlet UIPickerView *sendPicker;
    IBOutlet UILabel *sendLabel;
}

@property (nonatomic, retain) NSMutableArray *depositArray;
@property (nonatomic, retain) IBOutlet UIPickerView *depositPicker;
@property (nonatomic, retain) NSMutableArray *sendArray;
@property (nonatomic, retain) IBOutlet UIPickerView *sendPicker;
@property (nonatomic, retain) IBOutlet UILabel *depositLabel;
@property (nonatomic, retain) IBOutlet UILabel *sendLabel;

@end

Реализация:

#import "TransactionsViewController.h"


@implementation TransactionsViewController
@synthesize depositArray;
@synthesize depositPicker;
@synthesize sendArray;
@synthesize sendPicker;
@synthesize depositLabel;
@synthesize sendLabel;


}



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];


    NSMutableArray *dollarsArray = [[NSMutableArray alloc] init];
    for (int i = 5; i <= 100; i+=5)
    {
        NSString *item = [[NSString alloc] initWithFormat:@"%i", i];
        [dollarsArray addObject:item];

        [item release];
    }

    self.depositArray = dollarsArray;
    self.sendArray = dollarsArray;

    [dollarsArray release]; 


}

// Pickers
#pragma mark - Pickers
#pragma mark Pickers Data Source Methods

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if(pickerView == depositPicker) {
    switch(component) {
        case 0:
            return 1;
            break;
        case 1:
            return [depositArray count];
            break;
        default:
            break;
    }
    }
    else if(pickerView == sendPicker) {
        switch(component) {
            case 0:
                return 1;
                break;
            case 1:
                return [sendArray count];
                break;
            default:
                break;
        }
    }
    return 0;
}

-(CGFloat)pickerView:(UIPickerView*)pickerView widthForComponent:(NSInteger)component {
    switch (component) {
        case 0:
            return 50;
            break;
        case 1:
            return 100;
            break;
        default:
            break;
    }
    return 0;
}

#pragma mark Pickers Delegate Methods

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if(pickerView == depositPicker) {
    switch(component) {
        case 0:
            return @"$";
            break;
        case 1:
            depositLabel.text=[depositArray objectAtIndex:row];
            return [depositArray objectAtIndex:row];
            [depositLabel release];
            break;
        default:
            break;
    }
    }
    else if(pickerView == sendPicker) {
        switch(component) {
            case 0:
                return @"$";
                break;
            case 1:
                return [sendArray objectAtIndex:row];
                break;
            default:
                break;
        }
    }
    return 0;
}

//Pickers End


- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;

}


- (void)dealloc {
    [depositArray release];
    [send release];
    [super dealloc];

}


@end

Все, например sendLabel, еще не настроено. Как видите, depositLabel автоматически обновляется с выбранной строкой, однако значение не обновляется до правильного значения. Я не уверен, что проблема заключается в моей реализации метки или в самом сборщике.

Буду признателен за некоторые материалы. Спасибо.

1 Ответ

1 голос
/ 18 февраля 2010

Метод titleForRow - это именно то место, где вы должны вернуть текст для строки. В вашем titleForRow нет смысла устанавливать там текст метки (и я не думаю, что вы должны его выпустить). «Возвращение 0» в конце titleForRow также может вызвать проблемы.

Чтобы обработать фактический выбор в средстве выбора, используйте метод didSelectRow .

...