gpt4 book ai didi

iphone - 调用其他类中声明的 IBAction

转载 作者:行者123 更新时间:2023-11-29 13:43:40 26 4
gpt4 key购买 nike

我正在尝试为 iPhone 创建一个应用程序,我有一个主视图 Controller 和许多其他 View Controller 。这是因为它是一个多 View 应用程序。

在 ViewController.h 和 ViewController.m 文件中,我创建了所有 IBAction,因为它们将被所有其他 View 共享。

现在在 firstViewController.m 中,我使用以下代码创建了一个自定义按钮:

UIButton *settingsButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
settingsButton.frame = CGRectMake(110.0, 360.0, 100.0, 30.0);
[settingsButton setTitle:@"Play" forState:UIControlStateNormal];
settingsButton.backgroundColor = [UIColor clearColor];
[settingsButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal ];
UIImage *buttonImageNormal = [UIImage imageNamed:@"setButtonNormal.png"];
UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[settingsButton setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal];
UIImage *buttonImagePressed = [UIImage imageNamed:@"setButtonPressed.png"];
UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[settingsButton setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted];
[settingsButton addTarget:self action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:settingsButton];

如您所见,该操作称为“loadSettingsView”,我已在 ViewController 中正确声明了它。但它不起作用,这是因为上面的代码在 firstViewController.m 中,而不是在声明 IBAction 的 ViewController.m 中。注意我已经在 ViewController 中移动了上面的代码并且 Action 有效,因此不是 Action 的问题。问题是我找不到一种方法来访问在与我正在处理的类不同的类中声明的操作。

有人可以帮我吗?

非常感谢

最佳答案

您问题的答案在于您声明按钮操作目标的方式

[settingsButton addTarget:self action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];

如果这段代码位于firstViewController.m,而你说目标是self,那么编译器必须在中寻找方法>firstViewController 类。因此,要解决此问题,您需要将按钮操作的 target 指向 viewController 类。顺便说一句,此时我想提一下你的命名很糟糕,如果你将 UIViewController 子类化,不要将它称为 ViewController,让它更有意义。

实际修复。

创建一个指向ViewController 对象的全局属性并将其命名为vc

[settingsButton addTarget:vc action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];

关于iphone - 调用其他类中声明的 IBAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8287977/

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