2014-01-28 15 views
1

當我試圖用tableView: didSelectRowAtIndexPath:方法推動視圖控制器時,過渡確實有效,但它的動畫看起來相當糟糕;當我點擊UITableView中的任何單元格時,整個屏幕的三分之一首先變黑(但其他三分之二仍然是原始屏幕的UITableViewCell!),並且有一點延遲,整個屏幕變黑。tableView:didSelectRowAtIndexPath:如果不設置下一個視圖控制器的背景顏色,看起來很糟糕

我不知道爲什麼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方面,再一次,這是我要問這裏是什麼),但它會立即更改爲新的視圖控制器(自然,因爲它是動畫:NO首先完成)。

對此奇怪行爲的回答是在執行pushViewController: animated:方法之前設置第二個視圖控制器的backgroundColor,如this question中所建議的。

我想知道爲什麼我必須在轉換前設置背景顏色,爲什麼設置背景顏色可以解決這個與UI相關的問題。

我使用的iOS 7和的Xcode 5.

+0

你可以發佈的代碼DetailViewController,我懷疑有趣的事情發生在你的viewDidLoad,viewWillAppear,viewDidAppear等 –

+0

我沒有觸及那些繼承功能呢。 – Blaszard

回答

1

爲新的viewController的默認背景色是明確的,所以當你做一個動畫的推您可以通過新的viewController暫時看到,因爲它推動自身的導航堆棧的頂部。

設置一個不透明的背景顏色將意味着你的新VC不透明,因此你將無法透視下面的VC。但是,我建議你在你的新視圖控制器中設置你的backgroundColor,viewDidLoad,而不是在進行呈現的視圖控制器中(這不是你提交viewController的責任)。

+0

這是合理的,謝謝。 – Blaszard

-1

嘗試將詳細視圖的背景顏色在init方法?

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

反對的任何理由? – CW0007007

相關問題