icon - scope bar ios
iOS-如何預加載鍵盤? (3)
一旦用戶抱怨我的應用程序緩慢加載鍵盤。 這是禁用鍵盤動畫的一個小技巧:
- (void)viewDidLoad
{
[super viewDidLoad];
// ...
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(willShowKeyboard:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didShowKeyboard:)
name:UIKeyboardDidShowNotification
object:nil];
// ...
}
- (void)willShowKeyboard:(NSNotification *)notification
{
[UIView setAnimationsEnabled:NO];
}
- (void)didShowKeyboard:(NSNotification *)notification
{
[UIView setAnimationsEnabled:YES];
}
它可能無法直接回答問題,因為鍵盤本身位於我的示例的主UI中,而緩存不是我的選擇。 然而,整體響應能力得到改善。
問題
在大多數iPhone應用程序中,第一次出現鍵盤時會出現相當長的延遲(可能是創建鍵盤需要相當多的功能,即使在iPhone 4上也是如此)。
大多數人看起來都很好。 我不是,它真的讓我感到煩惱 - 以及我的應用程序呈現方式,用戶會非常困惑,他們第一次點擊文本字段時幾秒鐘都沒有發生任何事情。
我試過的
谷歌搜索引出了一個解決方案 - 不幸的是,從iOS 4開始這是無效的( 見這裡 )。
我不希望這個解決方案很容易找到,如果我可以直接給我一個賞金。 如果有人想出解決方案,我會非常激動。 解決方案需要做的就是在用戶不知情的情況下加載鍵盤。
所以..
任何想法都表示讚賞。 完整的工作代碼(適用於iOS 4和5)值得賞心悅目(即使賞金必須在以後出現!)。
如果找到解決方案,我計劃創建一個自包含的“KeyboardPreloader”類,人們可以將其放入他們的項目中,並使用一行代碼預加載鍵盤:)
使textfield成為firstResponder,然後在viewdidload中將其重新簽名..當鍵盤再次加載時,這似乎沒有延遲...
- (void)viewDidLoad
{
[super viewDidLoad];
[textField becomeFirstResponder];
[textField resignFirstResponder];
// Do any additional setup after loading the view, typically from a nib.
}
這是我做的:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Preloads keyboard so there's no lag on initial keyboard appearance.
UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
}