gpt4 book ai didi

iphone - 在 Objective-C 中委托(delegate)为外部类

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:42 24 4
gpt4 key购买 nike

我正在使用 Xcode 和 Interface Builder 为 iPhone 创建一个简单的项目。虽然我了解委托(delegate)是什么,但我在使用它时遇到了问题。

我的界面中有一个 UITextField。当用户点击它时它会显示键盘,但我需要手动编程如何隐藏键盘。可以使用委托(delegate)来完成。所以在 IB 中,我从库中获取对象,将它的类名称命名为 Control1Delegate,然后将我的文本字段中的委托(delegate)导出连接到此 Control1Delegate。我还有这个 Control1Delegate 类的 .m 和 .h 文件:

Control1Delegate.h

@interface Control1Delegate : NSObject <UITextFieldDelegate> {
}

- (BOOL) textFieldShouldReturn:(UITextField *)textField;

@end

Control1Delegate.m

#import "Control1Delegate.h"

@implementation Control1Delegate

- (BOOL) textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}

@end

但这行不通。运行时,它永远不会到达 textFieldShouldReturn 方法或在没有 msg 或 EXEC_BAD_ACCESS 的情况下崩溃。有趣的是,当我将方法移动到 Controller 文件(已生成一个向导)并从 UITextField 连接到该 Controller (文件所有者)时,一切都按预期进行。我看到大多数苹果代码教程将委托(delegate)方法放入随机对象而不是单独的类 - 我想知道为什么。我不能在单独的类(class)中有委托(delegate)吗?

我在这里缺少什么?一些空指针?对象生命周期?

最佳答案

您的 Control1Delegate 对象在创建后很快就会被销毁。如果您想让它们保持事件状态,则必须保留所有顶级 Nib 对象。引用Resource Programming Guide: The Nib Object Life Cycle .

文件所有者可以有这样的属性,以保留对象:

@property (nonatomic, retain) IBOutlet Control1Delegate *control1delegate;

记得在不再需要对象后释放它。

关于iphone - 在 Objective-C 中委托(delegate)为外部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462062/

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