我尝试自定义我的pickerview,以便像在图片(youtube网站)上点击webview上的下拉列表一样进行检查。
http://img830.imageshack.us/img830/3747/screenshot20101004at606.png
我使用viewForRow方法为picker中的每一行自定义视图。
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
UIView *rowView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 44)] autorelease];
rowView.backgroundColor = [UIColor clearColor];
rowView.userInteractionEnabled = NO;
UIImageView *checkmarkImageView = [[UIImageView alloc] initWithFrame:CGRectMake(5, 10, 24, 19)];
UIFont *font = [ UIFont boldSystemFontOfSize:18];
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(35, 0, 240, 44) ];
NSString *pickerText = [[Itemlist objectAtIndex:row] objectForKey:@"name"];
titleLabel.text = pickerText;
titleLabel.textAlignment = UITextAlignmentLeft;
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.font = font;
titleLabel.opaque = NO;
if ([selected_property_id intValue] == row) {
titleLabel.textColor = [UIColor blueColor];
checkmarkImageView.image = [UIImage imageNamed:@"checkmark.png"];
}else {
titleLabel.textColor = [UIColor blackColor];
checkmarkImageView.image = nil;
}
[rowView addSubview:checkmarkImageView];
[rowView addSubview:titleLabel];
[titleLabel release];
[checkmarkImageView release];
return rowView;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
[m_pickerView reloadAllComponents];
}
当我选择我想要的行时,它会完美地为所选行添加复选标记 但是当我向上/向下滚动拾取器时,拾取器将自动选择拾取器中间的行。因此,它会在中间行自动添加复选标记。
我的问题是如何在中间行禁用自动选择。 它应该在他们想要的行上的用户选项卡时添加复选标记(如在youtube中)。
我应该对pickerview使用触摸事件方法吗?
感谢您的帮助。
答案 0 :(得分:1)
是的,您应该使用触摸事件。但是,标准UIPickerView捕获触摸并且不会转发它们,因此viewcontroller永远不会接收事件。
我创建了一个带有UIPickerView子类的project on Github,它允许触摸转义它。它将它们转发到superview,然后在viewcontroller的touchesEnded方法中处理选择。它还实现了上述的复选标记。
答案 1 :(得分:0)
参考:https://github.com/scelis/SCKit/tree/
它有一个示例项目。真的比这里的代码粘贴好。