2013-10-21 74 views
1

iOS中的UITableViewController包含一個用於行選擇的細微動畫,在返回到視圖時(通過後退按鈕),先前選擇的行將被簡要突出顯示。這爲用戶提供了在應用程序中的位置感。在iOS 7中維護導航動畫

對於UIViewController s,此行爲不是免費的。包含的簡單方法是手動取消選擇viewWillAppear中的選定行。

但是,iOS 7允許用戶通過導航堆棧向後拖動。部分拖動但未完成拖動操作將觸發viewWillAppear並取消選擇該行。當用戶返回真實時,該行未被選中。

使用viewDidAppear一定能夠解決這個問題,但動畫會在稍後(明顯)觸發,並且會讓應用感覺遲緩。

有沒有人想出瞭解決這個問題的方法?

回答

1

我一直在想這個問題的解決方案。例如,當您查看本機郵件應用程序實現的行爲時,如果單擊後退按鈕,取消動畫動畫將在viewDidAppear之前啓動,但它不在viewWillAppear之內,因爲動畫在非交互式時非常快速且突然解聘。但是,當您在viewWillAppear上進行交互式解除和取消選擇時,單元格會隨着手指手勢逐漸取消選擇,如本機郵件應用程序。看起來viewWillAppear在動畫塊內部被調用。 從實驗中,performSelector:@selector(deselect) afterDelay:0viewWillAppear產生所需的動畫時點擊後退動畫。所以總而言之,當用戶點擊返回按鈕時:performSelector:@selector(deselect) afterDelay:0viewWillAppear;當用戶交互式滑動以解除時,deselectviewWillAppear中。

那麼如何區分這兩種情況呢? viewWillAppear當然沒有足夠的信息。 現在,人們可以實現導航控制器委託方法,向桌面視圖控制器發出信號,指示交互式彈出窗口即將啓動(在viewWillAppear之前),然後將其交給Apple的常規交互式彈出交互控制器。趕上? _interactionController是私有API。愚蠢的傻蘋果。

然後我發現你可以將UINavigationController加到它的interactivePopGestureRecognizer。所以你可以坐在中間,聽取委託方法,給你的表視圖控制器發出信號,並調用蘋果的手勢識別器代表實現。

這應該足以讓你走了。也許是一個可選協議和類別UITableViewController以上,然後測試是否彈出到表視圖控制器實例響應信號方法。或者是一個子類,當然。