如何用十六进制数字初始化uipicker

Posted

技术标签:

【中文标题】如何用十六进制数字初始化uipicker【英文标题】:how to initialize uipicker with hex digits 【发布时间】:2011-06-16 01:29:11 【问题描述】:

我想使用我的 uipicker 来初始化一个 5 字符的十六进制数字的字符串表示。所以换句话说,我需要 uipicker 的每个组件来显示 0-9,A-F 剂量任何人都知道如何做到这一点,或者是否有可能?

目前这是我的代码的外观。 //.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)];

【讨论】:

那是 whicked,所以我得到了我的字符串,我也很奇怪我如何用十六进制字符串设置每一列,目前我只有 0-16 十进制表示......但是谢谢你这部分我需要弄清楚。 啊.. 我看到 %x 会给我十六进制表示!那很酷!不过,我需要在我的选择器列中显示 A-F.. 在委托方法中使用return [[NSString stringWithFormat:@"%x",row] uppercaseString];而不是return [NSString stringWithFormat:@"%x",row]; 是的,大写字符串就像做梦一样。最后一个问题,你知道如何实现无限滚动吗?也就是说,它会通过十六进制数字循环回来? 对于大写十六进制,只需使用 %X(大写 X)。

以上是关于如何用十六进制数字初始化uipicker的主要内容,如果未能解决你的问题,请参考以下文章

如何用python把二进制数转换为十进制数?

java中如何用程序判断字符串是不是为十进制数

如何用Python将十进制数字转为二进制,以及将二进制转为十六进制?

在java中如何用for循环把一个十进制数转换成二进制

JAVA如何用一串16进制来初始化一个字符串对象

python如何用format进行进制转换与如何删除进制前缀