tableView: didSelectRowAtIndexPath: 如果不设置下一个视图控制器的背景颜色看起来很糟糕

Posted

技术标签:

【中文标题】tableView: didSelectRowAtIndexPath: 如果不设置下一个视图控制器的背景颜色看起来很糟糕【英文标题】:tableView: didSelectRowAtIndexPath: looks awful if not setting the next viewcontroller's background color 【发布时间】:2014-01-28 16:01:21 【问题描述】:

当我尝试使用tableView: didSelectRowAtIndexPath: 方法推送视图控制器时,转换确实有效,但它的动画看起来很糟糕;当我在 UITableView 中点击任意一个单元格时,整个屏幕的三分之一首先变黑(但另外三分之二仍然是原始屏幕的 UITableViewCell!),稍作延迟,整个屏幕就变黑了。

我想知道为什么tableView: didSelectRowAtIndexPath: 方法在用户界面方面表现得如此糟糕。这是我进行转换的代码:


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    DetailViewController *detailViewController = [[DetailViewController alloc] init];
    People *people = [_fetchedResultsController objectAtIndexPath:indexPath];
    detailViewController.title = people.type1;
    [self.navigationController pushViewController:detailViewController animated:YES];

但是,如果我将 animated: 更改为 NO,则转换没有任何问题(再次在 UI 方面;这就是我在这里要问的),但它会更改为新的视图控制器立即(当然,因为这是动画:一开始就不要做)。

而这种奇怪行为的答案是在执行pushViewController: animated: 方法之前设置第二个视图控制器的backgroundColor,正如this question 中所建议的那样。

我想知道为什么我必须在进行过渡之前设置背景颜色,为什么设置背景颜色可以解决这个与 UI 相关的问题。

我使用 ios 7 和 Xcode 5。

【问题讨论】:

您能否将代码发布到 DetailViewController,我怀疑您的 viewDidLoad、viewWillAppear、viewDidAppear 等中发生了一些有趣的事情 我还没有修改那些继承的函数。 【参考方案1】:

您的新 viewController 的默认背景颜色是清晰的,因此当您进行动画推送时,您可以暂时看穿新的 viewController,因为它会将自己推送到导航堆栈的顶部。

设置一个不透明的背景颜色将意味着你的新 VC 不透明,因此你将无法透过它看到下面的 VC。

但是,我建议您将 backgroundColor 设置在新视图控制器的 viewDidLoad 中,而不是设置在执行演示的视图控制器中(演示视图控制器实际上并没有责任这样做)。

【讨论】:

【参考方案2】:

尝试在init 方法中设置详细视图的背景颜色?

[[self view] setBackgroundColor:[UIColor whiteColor]];

【讨论】:

以上是关于tableView: didSelectRowAtIndexPath: 如果不设置下一个视图控制器的背景颜色看起来很糟糕的主要内容,如果未能解决你的问题,请参考以下文章

tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 没有被调用

方法 selectRow(at:animated:scrollPosition:) 不调用 tableView(_:didSelectRowAt:)

在 tableView(:didSelectRowAt) 中为自定义表格单元格 UILabel 设置值

将 tapGesture 添加到 tableView 则无法执行 tableView(_ tableView: UITableView, didSelectRowAt indexPath: Index

TableView didSelectRowAt IndexPath 没有被调用

当我点击 2 个 TableView 控制器之间的“didSelectRowAt indexPath”中的单元格时,我需要执行后退按钮操作