當鍵盤出現時,我需要移動視圖控制器的UI元素。我這樣做,在我的應用程序代理註冊的鍵盤通知:iPhone SDK:處理鍵盤外觀
[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:observer
selector:@selector(keyboardWasHidden:)
name:UIKeyboardDidHideNotification object:nil];
,然後處理通知蘋果規定的(我有一個鍵盤表現出類似的代碼)滾動視圖上下:
- (void)keyboardWasHidden:(NSNotification*)aNotification { CGRect viewFrame = [self.view frame]; viewFrame.origin.y += keyboardSize.height - TOOLBAR_HEIGHT; self.view.frame = viewFrame; }
到目前爲止好。現在問題描述:
當我執行這個代碼來顯示OS 3.0的具體消息UI:
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self; [self presentModalViewController:picker animated:YES];
,當鍵盤顯示了實際的郵件UI,我仍然得到鍵盤通知其滾動我查看並因此破壞我的用戶界面(請注意,郵件控制器需要整個屏幕,並且此時我的視圖甚至不可見)。
我希望暫時禁用鍵盤的通知,讓我滾動的代碼將不會被調用這一行:
[[NSNotificationCenter defaultCenter] removeObserver:self];
但它沒有幫助,甚至鍵盤仍然可以公佈。
我該怎麼做才能避免在消息UI創建時在鍵盤上作出反應?
偉大的心靈略同!在我發佈這篇文章後,我一直在想這個應用程序是可以嘗試的。 你能否澄清什麼是「原子」屬性?我只是在類中添加BOOL變量,甚至沒有屬性。 – leon 2009-11-13 19:02:10
如果你的應用程序是單線程的,你不必擔心原子性。實際上,因爲只有事件線程應該調用我命名的方法,所以忘記我甚至說過原子。我編輯了我的答案。 – 2009-11-13 19:32:23