как инициализировать uipicker шестнадцатеричными цифрами - PullRequest
0 голосов
/ 16 июня 2011

Я хочу использовать свой uipicker для инициализации 5-символьного строкового представления шестнадцатеричного числа.Другими словами, мне нужно, чтобы каждый компонент uipicker показывал 0–9, а доза AF - у кого-нибудь есть представление о том, как это можно сделать или, возможно, вообще возможно?

В настоящее время так выглядит мой код.//.h

//...

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate, UIPickerViewDelegate, UIPickerViewDataSource> {

    IBOutlet UIPickerView *hexPicker;

//...

//. m

//.....
- (void)viewDidLoad {

    //hexPicker = [[UIPickerView alloc] init];
//initalise icker at bottom of screen
hexPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 244, 320, 216)];
    hexPicker.delegate = self;
    hexPicker.dataSource = self;
    hexPicker.showsSelectionIndicator = YES;


    [self.view addSubview:hexPicker];


    [super viewDidLoad];
}
//.....

#pragma mark UIPickerViewDelegate methods

- (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
//This only shows as digits/integers
    //return [NSString stringWithFormat:@"%d",row];
//this shows those digits as hex
[[NSString stringWithFormat:@"%x",row] uppercaseString];
}

#pragma mark UIPickerViewDataSource methods

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pv
{
    return 5;
}

- (NSInteger)pickerView:(UIPickerView*)pv numberOfRowsInComponent:(NSInteger)component
{
    return 16;
}
//...

Также, как я могу загрузить сборщик внизу экрана.Спасибо. Обновлен код для представления этой части Обновлен pickerView: titleForRow: forComponent: метод для представления в шестнадцатеричном формате - теперь это то, что предполагается сделать:).

1 Ответ

1 голос
/ 16 июня 2011

Ваш метод делегата pickerView:titleForRow:forComponent: должен быть таким, как

- (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [NSString stringWithFormat:@"%X",row];
}

Когда вы хотите извлечь строку, сделайте это,

NSString *hexString = [NSString stringWithFormat:@"%X%X%X%X%X", [hexPicker selectedRowInComponent:0], [hexPicker selectedRowInComponent:1], [hexPicker selectedRowInComponent:2], [hexPicker selectedRowInComponent:3], [hexPicker selectedRowInComponent:4]];

Это должно дать вам нужную шестнадцатеричную строку,

Приложение

Чтобы поддерживать бесконечную прокрутку, вам просто нужно вернуть достаточно большое число для количества строк, подобных этому,

- (NSInteger)pickerView:(UIPickerView*)pv numberOfRowsInComponent:(NSInteger)component
{
    return 160000;
}

и во время инициализации используйте метод selectRow:inComponent:animated:, чтобы выбрать строку где-то посередине, чтобы пользователь мог прокручивать их в любую сторону.

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    for ( int i = 0; i < hexPicker.numberOfComponents; i++ ) {
        [hexPicker selectRow:80000 inComponent:i animated:NO];
    }
}

Вам также потребуется изменить методы, упомянутые выше,

- (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [NSString stringWithFormat:@"%X",(row % 16)];
}

И извлечение шестнадцатеричной строки будет,

NSString *hexString = [NSString stringWithFormat:@"%X%X%X%X%X", ([hexPicker selectedRowInComponent:0] % 16), ([hexPicker selectedRowInComponent:1] % 16), ([hexPicker selectedRowInComponent:2] % 16), ([hexPicker selectedRowInComponent:3] % 16), ([hexPicker selectedRowInComponent:4] % 16)];
...