2012-04-28 4 views
0

У меня этот метод в классе. Как использовать его в моем подклассе (этого класса), потому что когда я вызываю [self shiftViewUpForKeyboard]; ему нужен аргумент, но когда я набираюNotification, он дает ошибку. Я знаю, что это, вероятно, очень просто, но это действительно очень помогло бы мне в течение всего моего приложения.Как использовать методы подкласса

- (void) shiftViewUpForKeyboard: (NSNotification*) theNotification; 
{ 


    CGRect keyboardFrame; 
    NSDictionary* userInfo = theNotification.userInfo; 
    keyboardSlideDuration = [[userInfo objectForKey: UIKeyboardAnimationDurationUserInfoKey] floatValue]; 
    keyboardFrame = [[userInfo objectForKey: UIKeyboardFrameBeginUserInfoKey] CGRectValue]; 

    UIInterfaceOrientation theStatusBarOrientation = [[UIApplication sharedApplication] statusBarOrientation]; 

    if UIInterfaceOrientationIsLandscape(theStatusBarOrientation) 
     keyboardShiftAmount = keyboardFrame.size.width; 
    else 
     keyboardShiftAmount = keyboardFrame.size.height; 

    [UIView beginAnimations: @"ShiftUp" context: nil]; 
    [UIView setAnimationDuration: keyboardSlideDuration]; 
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y - keyboardShiftAmount); 
    [UIView commitAnimations]; 
    viewShiftedForKeyboard = TRUE; 

} 

Благодарим вас!

+1

Вы пытались '[self shiftViewUpForKeyboard: _theVariableYouWantToPass _];'? –

ответ

3

Это похоже на обработчик уведомлений. Обычно вы не должны вызывать обработчики уведомлений самостоятельно. Методы обработчика уведомлений обычно вызывается уведомлением, исходящим от NSNotificationCenter. Центр уведомлений отправляет объект NSNotification методу обработчика. В вашем случае уведомление содержит дополнительную информацию о пользователе.

Вы можете походить на словарь пользовательской информации в своем коде, который должен непосредственно вызвать обработчик и передать его методу обработчика (создание собственного объекта NSNotification с обязательным пользовательским информационным словарем). Тем не менее, это было бы склонно к ошибкам, и я подумал бы, что это «взломать».

Я бы рекомендовал вам поместить ваш код в отдельный метод, вызывать этот метод из обработчика уведомлений из вашего вопроса, а затем использовать отдельный метод для прямых вызовов.

Вы бы тогда:

- (void) shiftViewUpForKeyboard: (NSNotification*) theNotification; 
{ 
    NSDictionary* userInfo = theNotification.userInfo; 
    keyboardSlideDuration = [[userInfo objectForKey: UIKeyboardAnimationDurationUserInfoKey] floatValue]; 
    keyboardFrame = [[userInfo objectForKey: UIKeyboardFrameBeginUserInfoKey] CGRectValue]; 
    [self doSomethingWithSlideDuration:keyboardSlideDuration frame:keyboardFrame]; 
} 

Реализуйте метод doSomethingWithSlideDuration:frame: как метод экземпляра вашего класса. В коде, где вы вызываете его напрямую, вызовите doSomethingWithSlideDuration:frame вместо вызова обработчика уведомлений.

Вам необходимо передать длительность слайда и кадр самостоятельно при непосредственном вызове метода.

+0

Спасибо @starbugs, я попробую это позже! –

Смежные вопросы