在iPhone Safari中检查UIPickerView

时间:2010-10-07 09:31:28

标签: iphone uipickerview checkmark

我尝试自定义我的pickerview,以便像在图片(youtube网站)上点击webview上的下拉列表一样进行检查。

enter image description here 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使用触摸事件方法吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

是的,您应该使用触摸事件。但是,标准UIPickerView捕获触摸并且不会转发它们,因此viewcontroller永远不会接收事件。

我创建了一个带有UIPickerView子类的project on Github,它允许触摸转义它。它将它们转发到superview,然后在viewcontroller的touchesEnded方法中处理选择。它还实现了上述的复选标记。

答案 1 :(得分:0)

参考:https://github.com/scelis/SCKit/tree/

它有一个示例项目。真的比这里的代码粘贴好。