自定义 UITableViewCell 中的 UIButton 在旋转后停止工作

Posted

技术标签:

【中文标题】自定义 UITableViewCell 中的 UIButton 在旋转后停止工作【英文标题】:UIButton in custom UITableViewCell stop working after rotation 【发布时间】:2013-01-17 20:51:21 【问题描述】:

问题:

我使用了包含两个按钮的自定义 UITalbeViewCell,它们在纵向上可以正常工作。旋转后,它们都停止响应按钮修饰内部功能。有些人在旋转后出现按钮无法正确绘制的问题。我的看起来不错,因为按钮在旋转后显示在正确的位置,但它们不再响应按钮按下。

对于我应用程序中的这个特定视图,我使用 UIPageController 在视图中实现多个页面,对于嵌入在页面滚动控制器中的视图(暂时命名为 EmbeddedView),有一个包含自定义 UITableViewCell 的 UITableView。自定义表格视图单元格只有一个 nib,文件的所有者是 EmbeddedView。

在嵌入式视图中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

/*===== This is the most memory efficient way of creating table view cells =====*/

static NSString *CellIdentifier = @"CellIdentifier";

CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)

    [[self customTableCellNib] instantiateWithOwner:self options:nil];
    cell = [self customTableCell];
    [self setCustomTableCell:nil];
    

我尝试了什么:

我为自定义表格视图单元格创建了另一个 nib 文件并在 -cellForRowAtIndexPath() 中使用它,我检查了方向并使用不同的 nib 动态创建单元格,没有运气。

我在 -didRotateFromInterfaceOrientation() 中添加了 [tableview reloadData],没有做任何事情。

有人能给我指出正确的方向吗?任何帮助表示赞赏。

这是 IB 中自动调整大小的表格视图:

看起来不错,但按钮不起作用

更新:我尝试在 IB 中为表格视图指定不同的 Autosizing 掩码,结果如下所示:

【问题讨论】:

只需在 cellForRowAtIndexPath() 方法的 UIbutton 事件内添加修饰然后检查。 @DixitPatel:谢谢伙计,但这并没有改变任何东西。 按钮是否被视觉按下?我的意思是当您按下按钮时,您是否看到按钮的“向下”状态发生变化? (默认情况下它应该变暗)。 在调整大小时出现意外行为等情况下,我通常会做的是将层次结构中的每个视图更改为不同的、易于识别的颜色。现在,您拥有具有相同背景颜色(或清晰)的视图 A 和视图 B,并且您看不到视图 B 的大小是否调整得很好。祝你好运。 @FábioOliveira,嘿伙计,在为不同的视图着色后,我发现原因是页面容器的框架大小没有正确调整大小,即使滚动视图内容大小也是如此。这就是为什么即使我可以滚动并且看起来容器大小是正确的但实际上不是。如果您可以编辑您的答案并将您的提示放在一起以便它可以帮助遇到相同问题的人,我会标记您的答案并给您剩下的 25 个学分。谢谢老兄。 【参考方案1】:

您是否检查过超级视图是如何调整大小的?

检查 superview 是否选中了“clip to bounds”。如果不是检查它。这将使视图剪辑其内容,以便您查看它是否可以调整大小。

我会说超级视图的大小不正确,因此触摸事件也没有很好地传递。

编辑 - 所以这是可以让 OP 找到解决方案的提示:

在调整大小时出现意外行为时,我通常会做的是将层次结构中的每个视图更改为不同的、易于识别的颜色。现在,您拥有具有相同背景颜色(或清晰)的视图 A 和视图 B,并且您看不到视图 B 的大小是否调整得很好。祝你好运。

【讨论】:

嗨法比奥。 “剪辑到边界”是指“剪辑子视图”?因为我无法在情节提要中找到“剪辑到边界”属性。我有类似的问题。在纵向中,tableview 工作正常,但在横向中,tableview 的右半部分无法识别触摸 - 滚动视图、按钮和 tableviewcell 的其他元素都没有。 @RaviSisodia:是的。您的表格视图顶部可能有一些正在接受触摸事件的东西。试试揭示应用程序或火花检查器应用程序。您将能够检查所有视图层次结构并查看发生了什么。

以上是关于自定义 UITableViewCell 中的 UIButton 在旋转后停止工作的主要内容,如果未能解决你的问题,请参考以下文章

在 Storyboard 中设计的自定义 UITableViewCell 中的自定义 UIView

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

将自定义 UITableViewCell 从 nib 加载到 Swift 中的 UIViewController

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局