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”中的单元格时,我需要执行后退按钮操作