2014-07-11 27 views
3

我有以下viewDidLoad方法:becomeFirstResponder很慢

- (void)viewDidLoad { 
    NSLog(@"didLoad"); 
    if (self.loginField.text.length > 0) [self.passwordField becomeFirstResponder]; 
    else [self.loginField becomeFirstResponder]; 
} 

我也viewWillAppearviewDidAppear添加日誌時間。

有些情況下,推動畫需要很長時間。我通過評論(並且沒有)if-else行來測量時間(請參閱:時間如下所示)。我不知道什麼可以在viewWillAppearviewDidAppear調用之間減慢我的應用程序。

我試圖用Time Profiler(Instruments)來分析這段代碼,但它什麼也沒有顯示。我不知道該怎麼做,以更快地展示我的觀點。有任何想法嗎?

隨着becomeFirstResponder,第一呼叫

2014-07-11 16:51:41.090 didLoad 
2014-07-11 16:51:41.133 willAppear 
2014-07-11 16:51:44.223 did appear 
diffAppear = 3090ms 

隨着becomeFirstResponder,第二呼叫

2014-07-11 16:52:01.370 didLoad 
2014-07-11 16:52:01.400 willAppear 
2014-07-11 16:52:02.109 did appear 
diffAppear = 709ms 

沒有becomeFirstResponder,第一呼叫

2014-07-11 16:57:21.720 didLoad 
2014-07-11 16:57:21.754 willAppear 
2014-07-11 16:57:22.420 did appear 
diffAppear = 666ms 

沒有becomeFirstResponder,第二呼叫

2014-07-11 16:57:31.851 didLoad 
2014-07-11 16:57:31.870 willAppear 
2014-07-11 16:57:32.541 did appear 
diffAppear = 671ms 
+1

'-becomeFirstResponser'通常爲需要時間的實際對象加載_input views_。另一方面,你應該調用這個方法_after_視圖在導航堆棧和視圖層次結構中,這意味着在這種情況下:_in_或_after_ -viewDidAppear:'方法,不要早。 – holex

+0

但是,然後鍵盤不會出現immidietly – Szu

+0

是的,這是事實,但這不是一個好習慣,正如你所見 - 非常緩慢。 – holex

回答

0

正如註釋@holex求佛:

的-becomeFirstResponser通常加載用於 實際物體花費時間的輸入意見。另一方面,在視圖正確處於導航堆棧和視圖層次結構中後,應該調用 這種方法,這意味着在這種情況下:在 -viewDidAppear:方法中或之後,不會更早。

我將–becomeFirstResponser移動到-viewDidAppear:。現在根據這question我添加這些觀察員,如下所示,現在的應用程序,因爲它應該。

- (void)willShowKeyboard:(NSNotification *)notification { 
    [UIView setAnimationsEnabled:NO]; 
} 

- (void)didShowKeyboard:(NSNotification *)notification { 
    [UIView setAnimationsEnabled:YES]; 
} 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willShowKeyboard:) name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didShowKeyboard:) name:UIKeyboardDidShowNotification object:nil]; 

這不是一個完美的解決方案(推動動畫沒有鍵盤),但對我來說已經夠用了。

+0

如果解決了這個問題,請明確提及它。 – Eonil