更新时间:2023-12-04 12:22:34
您需要确保自定义视图具有以下属性:
You need to make sure your custom view has the following properties:
pickerView:rowHeightForComponent:
和 pickerView:widthForComponent:
。 [UIColor clearColor]
。/ li> pickerView:rowHeightForComponent:
and pickerView:widthForComponent:
. The default height is 44 if you're not specifying a custom height.[UIColor clearColor]
.使用 UILabel
实例作为自定义视图是 UILabel
defaults userInteractionEnabled
到 NO
( UIView
,另一方面,默认此属性为 YES
) 。
The one gotcha when using UILabel
instances as the custom view is that UILabel
defaults userInteractionEnabled
to NO
(UIView
, on the other hand, defaults this property to YES
).
根据这些要求,来自 Halle 可以重写如下。此示例还正确重复使用先前创建的视图,这是快速滚动性能所需的。
Based on these requirements, the example code from Halle can be rewritten as follows. This example also correctly reuses previously created views, which is needed for fast scrolling performance.
- (UIView *)pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row
forComponent:(NSInteger)component
reusingView:(UIView *)view {
UILabel *pickerRowLabel = (UILabel *)view;
if (pickerRowLabel == nil) {
// Rule 1: width and height match what the picker view expects.
// Change as needed.
CGRect frame = CGRectMake(0.0, 0.0, 320, 44);
pickerRowLabel = [[[UILabel alloc] initWithFrame:frame] autorelease];
// Rule 2: background color is clear. The view is positioned over
// the UIPickerView chrome.
pickerRowLabel.backgroundColor = [UIColor clearColor];
// Rule 3: view must capture all touches otherwise the cell will highlight,
// because the picker view uses a UITableView in its implementation.
pickerRowLabel.userInteractionEnabled = YES;
}
pickerRowLabel.text = [pickerDataArray objectAtIndex:row];
return pickerRowLabel;
}