这或多或少是这篇文章的延续:Button in UITableViewCell not responding under ios 7
我遇到了同样的问题,并尝试了线程中的每个建议。显然我不拥有这个问题所以我不能编辑它以提供更多信息,因此我现在为什么要发布这个问题!
我有一个VC nib我加载了有一个tableview,我根据其中的行数调整大小。每行都是使用nib文件从自定义的uitableviewcell子类生成的。那个类/笔尖里面有4个按钮。我现在可以在iOS 6或iOS 8中加载此代码,它可以完美地运行。我没有iOS 7设备所以我被绑定到7.1的模拟器(这是我猜的用户报告此问题的用户也是如此,因为它是今天)。现在在模拟器和用户的手机中,我可以触摸/单击该VC上的所有其他内容,除了单元格中的任何按钮。好像他们将UserInteractionEnabled
设置为NO,但他们没有,也没有任何父视图(因为我很快就会进入)。
- 使用和不使用自动布局
从头开始重新创建笔尖在单元格类的[self.contentView addSubview:button]
中调用awakeFromNib
- 在运行时使用contentView
[self.contentView addSubView:button]
- 确保我可以找到的层次结构中的每个视图都有四次,导致这些按钮的userInteractionEnabled
设置为YES。 (包括但不限于tableview本身,单元格,contentView
以及当我向其设置的按钮添加“父视图”时)
- 用父视图提升所有按钮,只包含按钮
- 所有按钮位于事件堆栈的顶部(视觉底部)(添加和删除是另外两个按钮):
- 将表格单元格选择从单个设置为无。
- 我没有覆盖我的手机课程中的layoutSubviews
- 我无法移动内容视图之外的任何视图,因为如果我这样做,Interface Builder会将它们完全从单元格中移出。
- 我尝试在运行时仅在userInteractionEnabled
上禁用ContentView
而没有更改
- 我尝试将tableview [cell bringSubviewToFront:cell.button];
的单元格创建代码放入相同结果的不同按钮中。
- 我尝试将层次结构中所有视图的所有背景颜色设置为不同颜色,这样我就可以在运行时直观地调试它......它看起来与预期完全一样。没有重叠或覆盖物。 (这仅限于单元格中的视图)
- 这是TableView的所有设置:
- 我试图在新的XCode 6中加载它以使用可视化调试器,但它附带的7.1模拟器实际上完全运行了代码,所以我可以调试它......
- 这是VC中的出队代码:
NiTGroupTimeCell* cell = (NiTGroupTimeCell*)[tableView dequeueReusableCellWithIdentifier:ident forIndexPath:indexPath];
-Here是VC的viewDidLoad
中的代码,用于设置表格的单元格nib(它是2,因为这是从头开始的):
[self.timesTable registerNib:[UINib nibWithNibName:@"NiTGroupTimeCell2" bundle:nil] forCellReuseIdentifier:@"GroupTime"];
- 通过IB进行所有连接。这些都是使用IBAction或IBOutlet。
- 我在所有按钮方法中都有NSLog
个语句来测试它们是否实际被调用,但我还测试了断点。所有这些都不会在测试中触发。
- 实现的唯一TableView委托或数据源方法如下:
-(int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- 根据建议,我把Revel带到了它,发现视图中有一个神秘的UILabel
和UIImageView
......但是你可以看到它们的帧都是零,所以它们不应该'这样做会妨碍我们害怕的事情:
UILabel框架:
UIImageView框架:
IIRC我之前把它当作模拟器错误计算过,但是由于它发生在用户的设备上,它必定是一个实际的问题而且它正在阻止我的管道,所以非常感谢帮助!提前致谢!PS我很乐意发布任何内容,但由于调试的所有转变,我不知道人们想要看到什么,我不想超载这篇文章,因为我知道它会是与其他一切有关。
答案 0 :(得分:3)
显然问题是这些代码行(来自我的git diff输出的diff格式):
--(int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
和
--(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
+-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
所以是的......似乎在iOS7 +中如果你有#34; old"这些数据源方法的输出类型看起来不错,但是在功能上对你的tableview很麻烦...很好的时候,但是它现在已经解决了^^希望这对其他人有帮助。
答案 1 :(得分:1)
我怀疑您的自定义UITableViewCell子类NiTGroupTimeCell
或者从nib到tableViewCell子类的IBAction连接存在问题。
我也想知道额外的空UILabel和UIImageView。它们听起来像在UITableViewCell.h,UIImageView *imageView
和UILabel *textLabel
中声明的默认属性。事实上,他们已经实例化(并且没有),这可能是您所看到的奇怪,意外行为的线索。
你有UIButtons的IBOutlets吗?如何更改按钮的属性(代码中)(例如背景颜色),以确保实际将它们保留在NiTGroupTimeCell
中。
答案 2 :(得分:0)
您说您尝试了[self.contentView addSubview:button],但第一张图片中的按钮位于contentView内的视图中。尝试将IBOutlet链接到该视图,然后尝试[nameOfView addSubview];
答案 3 :(得分:0)
投掷一个狂野的猜测,因为它看起来已经覆盖了其他所有东西。
你说:
我加载了一个包含tableview的表格,我根据其中的行数调整大小
您发布的屏幕截图显示clip subviews
UITableView
已关闭
您是否正确设置了tableview的框架,但由于子视图未被剪裁而无法显示单元格?
再次加载reveal
并检查UITableView
答案 4 :(得分:0)
不确定这是否是这种情况。但是,如果您将自定义单元格出口imageView
,textLabel
或任何“内置”UITableViewCell
的属性命名,您将获得奇怪的结果和行为。
答案 5 :(得分:0)
你需要检查几件事情:
User Interaction
。AutoSizing
并确保按钮位于视图内部,以便接收触摸事件,否则触摸事件将被忽略。您可以通过更改视图的颜色来验证它。如果出现问题,更改颜色或NSLog
按钮和父视图的框架将有助于您排除故障。addSubView
以编程方式进行。{/ li>
clearColor
背景色的按钮重叠。答案 6 :(得分:0)
对我有用的是:
self.contentView.userInteractionEnabled = NO;
我从nib / storyboard加载自定义单元格后调用了这个。如果userinteractionEnabled
设置为NO,我的按钮无法以某种方式响应触摸。我的contentView
已收到所有触摸,但没有将它们转发到我的按钮。
我看过代码
[cell bringSubviewToFront:button]
已被用作解决方法,对我来说它没有解决问题。
答案 7 :(得分:0)
我有一个类似的问题,同时添加了基于Guestures的Custom Acions。
我在继承类UITableViewCell
中在运行时添加了Action Button
如果我在可见矩形之外添加按钮,在内部设置动画按钮后,我就无法点击/点击。但是在My Case中,如果按钮被添加到可见的矩形中,我就可以点击/点击。
为我工作的是什么,我在View
而不是ContentView
的UITableViewCell中添加了这些按钮,然后仅设置动画内容视图。你可以尝试一下simora
- 维沙尔
答案 8 :(得分:0)
您已经说过没有TouchRecognizers(TapRecognizers?),但我认为您应该仔细检查一下,不仅要看触摸识别器,还要看控制器中使用该单元的任何识别器,甚至添加到self.view /的tableView。 我最近试图找出为什么细胞不选择(委托方法没有被调用)只是为了发现我已经添加了2个手势识别器(在代码中,那些是其他东西必需的,但我必须以其他方式这样做才能阻止细胞选择。
另外,它的标志可能是如果你按住按钮足够长(在那里放置断点以便你可以更容易),动作将会触发。