gpt4 book ai didi

cocoa - 如何使用子类方法

转载 作者:行者123 更新时间:2023-12-03 17:35:36 24 4
gpt4 key购买 nike

我在类中有这个方法。我如何在我的子类(此类)中使用它,因为当我调用 [self shiftViewUpForKeyboard]; 时它需要参数,但是当我输入 theNotification 时,它给出了一个错误。我知道这可能是非常基本的,但它确实会对我的整个应用程序有很大帮助。

- (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;

}

谢谢您!

最佳答案

这看起来像一个通知处理程序。您通常不应自行调用通知处理程序。通知处理程序方法通常由 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 而不是调用通知处理程序。

直接调用该方法时需要自行传入幻灯片时长和帧数。

关于cocoa - 如何使用子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10361703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com