我正在尝试创建一个UIPicker,我可以选择分钟和秒。这是代码:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if(component == 0)
return 24;
return 60;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return 30;
}
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component
{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setAlignment:NSTextAlignmentCenter];
[paragraphStyle setTailIndent:20];
NSString *value = [NSString stringWithFormat:@"%d", row];
return [[NSAttributedString alloc] initWithString:value
attributes:@{NSParagraphStyleAttributeName:paragraphStyle}];
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
return 160;
}
如何摆脱恼人的曲率并制作垂直柱?
另外,如何在选择行中添加“min”和“sec”?
答案 0 :(得分:1)
我发现更改组件的宽度会影响UIPickerView应用于所选行的偏移或曲率效果。在您的委托实现pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat
中,尝试返回足够大的值来显示您想要显示的信息,例如40或60,只显示一个简单数字的两个字符。要更改列/组件之间的间距,您可以添加为行数返回0的额外组件,并使用这些空组件的宽度移动并调整要显示数据的组件的位置。
答案 1 :(得分:0)
由于您将其制作成24分钟和60秒,我会用24小时日期选择器伪造它。 IMO
如何摆脱恼人的曲率并制作垂直柱?
你不是。否则,使用2个表视图或其他东西实现自己的。
另外,我怎样才能添加" min"和"秒"到选择行?
NSString *value;
if(component == 0) value = [NSString stringWithFormat:@"%d min", row];
else value = [NSString stringWithFormat:@"%d sec", row];
答案 2 :(得分:0)
正如其他人所说,现有的API无法做到。如果你想这样做,你必须编写自己的代码才能做到这一点。我过去创建了一个水平值选择器,它很烦人,但相当直接。为此,我使用了UILabel
,图片和UIScrollView
。
首先设置UI
在大多数情况下,它显示工作......但我们需要后端代码来支持它。
UIScrollViewDelegate
并实施scrollViewDidScroll:
,当用户更改滚动视图时,它会告诉您滚动视图的内容偏移量。所以基本功能已经完成并且有效,但它并不漂亮。
所选项目并未以我的选择图片为中心,这只是视觉上的丑陋。但是你可以很容易地修复它。您知道列表中项目的高度,并且您知道选择了哪个项目,因此以编程方式滚动滚轮以使该项目居中。
我遇到的另一个问题是势头。就像一个真正的轮子,我希望我的选择器具有动力,所以如果你给它一个硬翻,它会持续一段时间,但如果你给它一个轻柔的轻弹它会停止相当快。我有很长的名单,如果人们从7到70,我希望他们能够轻松地做到这一点。如果您对此感兴趣,我可以告诉您我是如何做到这一点并在我使用我的代码回到机器上时发布一些代码。