gpt4 book ai didi

ios - IBOutlet 在 IBAction 实现后返回 nil (IOS)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:08 28 4
gpt4 key购买 nike

我通过 Xcode 的 Interface Builder 创建了 3 个 UIButton。

像这样在 Controller.h 中定义 IBOutlet 和 IBAction:

@property (strong, nonatomic) IBOutlet UIButton *btnToday;
@property (strong, nonatomic) IBOutlet UIButton *btnToday_less_1;
@property (strong, nonatomic) IBOutlet UIButton *btnToday_less_2;


- (IBAction) setBtnToday: (UIButton *) sender;

- (IBAction) setBtnToday_less_1: (UIButton *) sender;
- (IBAction) setBtnToday_less_2: (UIButton *) sender;

在我的 Controller.m 中有这个:

@synthesize btnToday;
@synthesize btnToday_less_1;
@synthesize btnToday_less_2;


- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

[btnToday setTitle:@"Today" forState: UIControlStateNormal];
[btnToday_less_1 setTitle:@"Yesterday" forState: UIControlStateNormal];
[btnToday_less_2 setTitle:@"Day before yesterday" forState: UIControlStateNormal];
}

上面的代码工作正常,但如果我实现 IBAction 它就不行。

实现看起来像这样:

-(IBAction)setBtnToday:(UIButton *)sender{ /* a method call */ }
-(IBAction)setBtnToday_less_1:(UIButton *)sender{ /* a method call */ }
-(IBAction)setBtnToday_less_2:(UIButton *)sender{ /* a method call */ }

如果我对任何 IBOutlet 执行 NSLog,它们将返回 nil。如果从 Controller.m 文件中删除 IBAction 的代码,它将再次开始工作。

我做错了什么?

注意:不起作用意味着它没有错误地编译并运行,但我尝试在 UIButton 上设置的文本没有更新。

最佳答案

您不能覆盖 setBtnToday: , setBtnToday_less_1: , 和 setBtnToday_less_2:之所以如此,是因为这些正是运行时所依赖的 setter 方法来设置您在 xib 文件中配置的按钮。

当您创建(非 readonly)属性时,编译器会为您的属性合成“getter”和“setter”方法。默认情况下,getter 方法是 - (<property type>)<property name> setter 是 - (void)set<CamelCase property name> .您发布的那些 IBAction 方法正是您的三个按钮属性的 setter 。通过显式编写它们(并让它们什么也不做),您将阻止编译器合成默认的 setter 实现,这反过来又会阻止 xib 加载代码以预期的方式工作。

如果您正在尝试实现方法来响应被点击的按钮,您应该将它们命名为其他名称,例如 - (IBAction)btnTodayTapped:(id)sender , - (IBAction)btnToday_less_1_tapped:(id)sender等。或者,您可以创建一个 方法,- (IBAction)buttonTapped:(id)sender并让该方法检查 sender以确定点击了哪个按钮。

关于ios - IBOutlet 在 IBAction 实现后返回 nil (IOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126492/

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