2011-06-16 2 views
0

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

В настоящее время так выглядит мой код. //.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

Вашего метод делегата 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)]; 
+0

То whicked, так что заставляет меня мои строки, я был также очень важен, как я устанавливаю каждый столбец с шестнадцатеричной строкой, на данный момент у меня есть только 0-16 десятичное представление. Но спасибо за эту часть, которую мне нужно было выяснить. – tinhead

+0

Ahh .. Я вижу, что% x даст мне шестнадцатеричное представление! это круто! хотя, мне нужно показать AF в моих столбцах выбора. – tinhead

+0

use 'return [[NSString stringWithFormat: @"% x ", row] uppercaseString];' вместо 'return [NSString stringWithFormat: @"% x ", row] ; 'в методе делегата. –

Смежные вопросы