您可以在viewWillAppear中添加Observer,並在viewWillDisappear中移除Observer。 但viewWillAppear可能會調用很多次。所以你可以先移除通知然後再移除addObserver。
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIKeyboardWillShowNotification" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIKeyboardWillHideNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)name:@"UIKeyboardWillShowNotification"object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)name:@"UIKeyboardWillHideNotification"object:nil];
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:YES];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIKeyboardWillShowNotification" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIKeyboardWillHideNotification" object:nil];
}
我不認爲刪除不存在的觀察者有任何不利影響。 – jbat100 2012-04-26 12:38:59
@ jbat100謝謝。我絕對會想在dealloc和viewDidUnload中移除觀察者,這是唯一的出路。 – Undistraction 2012-04-26 14:33:30