UIPickerview 中的 UIButton 没有响应

Posted

技术标签:

【中文标题】UIPickerview 中的 UIButton 没有响应【英文标题】:UIButton in UIPickerview is not responding 【发布时间】:2014-04-04 11:00:15 【问题描述】:

我在 UIPickerview 中有一个自定义视图,如下所示

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

  UIView *vw = [[UIView alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 30)];
  UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 30)];
  [btn addTarget:self action:@selector(filtercategory) forControlEvents:UIControlEventTouchUpInside];
  btn.showsTouchWhenHighlighted = YES;
  [btn setImage:[UIImage imageNamed:@"longmp"] forState:UIControlStateNormal];
  [vw addSubview:btn];
  return vw;

方法filtercategory 没有被调用。我搜索了解决方案。但是拿不到。

即使showsTouchWhenHighlighted 也不起作用。

pickerview 的样子

添加了UiButton,因为this是纯白色的图片,我尝试了不同的图片来确认。

如何让 UIButton 响应?

【问题讨论】:

任何建议将不胜感激。 @CW0007007,因为要求用户必须在选择行后单击该行。 为什么,这对我来说没有意义。选择器视图就是这样,您选择值并发生某些事情。你不选择一行然后点击一个按钮!!!!如果他们错过了点击并且该行然后滚动到另一个应该怎么办...在我看来,您可能需要重新考虑您的方法。 【参考方案1】:

确保两件事:

1) 它不会出现在这个委托函数中,因为你想处理你的按钮点击:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
inComponent:(NSInteger)component

2) 我对这里的按钮框架有疑问:

[[UIButton alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 30)];

确保按钮位于控件的活动区域中。我有经验,如果控件超出父控件的范围,它不会收到触摸事件。

3) 试试UITapGestureRecognizer。

【讨论】:

因为要求用户必须在选择行后单击该行。我不能使用 didSelectRow 方法。并且按钮位于视图的框架下。我可以在行视图中看到按钮的图像。 暂时改变按钮和uiview的颜色,不要设置图像,然后看看一切是否出现在它的位置?【参考方案2】:

试试

[btn setUserInteractionEnabled:YES];

编辑

如果您希望用户在 UIPickerView 中滚动到该项目后选择当前项目,那么UIActionSheet 可以帮助您。 This 可以帮助您在UIPickerView 顶部添加UIToolBar

你只需要在 UIToolBar 中添加 UIBarButtonItem 就可以让 ios 用户看起来更自然。

【讨论】:

从你调用的地方 [pickerview setUserInteractionEnabled:YES]; ? 嗨,解决了吗?我也面临这个问题......似乎 UIPickerView 对于行视图是“只读”的,它似乎只允许使用选择但输入

以上是关于UIPickerview 中的 UIButton 没有响应的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 响应 UIPickerview

避免 UIPickerView ios 上的 UIButton 覆盖

带有 UIButton 的 UIPickerView

使用 UIButton 实现 UIDatePicker 和 UIPickerView

从另一个控制器的 UIPickerView 更新 UIButton 的标题

使用 UIPickerView 编辑 UIButton 的文本