gpt4 book ai didi

iphone - IOS 设置自定义委托(delegate)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:25 24 4
gpt4 key购买 nike

我正在研究 IOS HelloWorld 示例,我有一个关于为 TextField 设置委托(delegate)的问题。在这个例子中,它就像控制从 TextField 拖动到 ViewController 一样简单。但是现在说我想创建一个自定义类来充当我的委托(delegate):

#import <Foundation/Foundation.h>
@interface SweetAssDelegate : NSObject <UITextFieldDelegate>
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField;
@end

#import "SweetAssDelegate.h"

@implementation SweetAssDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField
{
NSLog(@"Calling Delegate");
[theTextField resignFirstResponder];
return YES;
}
@end

如何将此类设置为 TextField 的委托(delegate)?据我所知,没有办法通过 GUI 来完成此操作。我尝试在窗口加载后手动设置委托(delegate)但没有成功:

#import "ViewController.h"
#import "SweetAssDelegate.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *inputField;
@end

- (void)viewDidLoad
{
[super viewDidLoad];

SweetAssDelegate *foo = [[SweetAssDelegate alloc] init];
[self.inputField setDelegate:foo];

NSLog(@"Delegate: %@", self.inputField.delegate);
}

我实际上在调出键盘时收到某种内存异常?有任何想法吗?谢谢。

作为附带问题,我应该始终在哪里使用 viewDidLoad 来初始化任何变量?我注意到 init 没有被调用???

最佳答案

您的委托(delegate)对象 foo 允许超出范围并在 viewDidLoad 结束时释放,当键盘出现时,它不会不存在了。使其成为 View Controller 的 ivar(或属性),或者以其他方式确保 foo 不会超出 viewDidLoad 末尾的范围。

因此,它可能是这样的:

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *inputField;
@property (strong, nonatomic) SweetAssDelegate *foo;
@end

- (void)viewDidLoad
{
[super viewDidLoad];

self.foo = [[SweetAssDelegate alloc] init];
[self.inputField setDelegate:self.foo];

NSLog(@"Delegate: %@", self.inputField.delegate);
}

关于iphone - IOS 设置自定义委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732484/

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