以编程方式向按钮添加操作

火花

我正在尝试从自定义类中以编程方式向按钮添加操作。但是,执行该操作时,我总是收到错误消息。我已经阅读了很多有关如何执行此操作的信息,但显然在某个地方犯了一个错误,无法弄清楚在哪里。

该按钮是在第一个实例中通过将其拖动到情节提要上而创建的。然后,我将控件拖到ViewControler.h文件中以获取此信息:

@property (strong, nonatomic) IBOutlet UIButton *testButtonForClass;

在ViewControler.m中,我这样做:

- (void)viewDidLoad
{
    [super viewDidLoad];

    testClass *myClass = [[testClass alloc]init];
    myClass.myButton = self.testButtonForClass;
    [myClass assignActionTargets];
}

下面是自定义类的Header和Implementation文件。

头文件

#import <Foundation/Foundation.h> 

@interface testClass : NSObject

@property (nonatomic, strong) UIButton *myButton;

-(void)assignActionTargets;

@end

实施文件

#import "testClass.h"

@implementation testClass

-(void)assignActionTargets{    
    [self.myButton addTarget:
    self action:@selector(myButtonInnerTap) 
    forControlEvents:(UIControlEventTouchUpInside)]; 
}

-(void)myButtonInnerTap{
     UIAlertView *a = [[UIAlertView alloc]initWithTitle:nil 
     message:@"testClass says hello" 
     delegate:nil 
     cancelButtonTitle:@"Dismiss" 
     otherButtonTitles:nil, nil];

    [a show];
}

@end
加布里埃·彼得罗内拉(Gabriele Petronella)

您创建了一个testClass实例,但是没有保留对它的引用,因此它在的末尾被释放viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];

    TestClass *myClass = [[TestClass alloc] init];
    myClass.myButton = self.testButtonForClass;
    [myClass assignActionTargets];

    // myClass gets deallocated here!
}

单击该按钮时,它将尝试访问您指定的目标,但是现在这是一个指向无效内存段的悬空指针,从而导致崩溃。

您必须myClass保持对它的强烈引用,以便在单击按钮时使它保持活动状态。声明一个强大的属性是实现此目标的一种好方法。

@property (nonatomic, strong) TestClass *myThingy;

- (void)viewDidLoad {
    [super viewDidLoad];

    self.myThingy = [[testClass alloc] init];
    self.myThingy.myButton = self.testButtonForClass;
    [self.myThingy assignActionTargets];
}

代码样式说明:请使用一些命名约定。类名应该大写(我在上面的代码片段中已经更改过,因为它杀死了我...),并且使用myClass指向实例指针显然是令人迷惑的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

以编程方式向按钮添加事件

来自分类Dev

快速以编程方式向工具栏添加按钮

来自分类Dev

如何以编程方式向片段添加按钮

来自分类Dev

Swift以编程方式向按钮添加显示动作

来自分类Dev

Android:以编程方式向通知添加按钮

来自分类Dev

是否可以使用iText以编程方式向“ Acroform”字段添加“打开Web链接操作”操作?

来自分类Dev

以编程方式向WPF中的工具栏添加按钮

来自分类Dev

如何在Swift 2中以编程方式向按钮添加约束?

来自分类Dev

如何以编程方式向OS X应用程序添加交通灯按钮

来自分类Dev

以编程方式向容器添加控件

来自分类Dev

以编程方式向Spark DataFrame添加几列

来自分类Dev

以编程方式快速向NavigationBar添加约束

来自分类Dev

以编程方式向元素添加属性

来自分类Dev

以编程方式向图像添加边框

来自分类Dev

以编程方式向UITextField添加约束

来自分类Dev

以编程方式向Spark DataFrame添加几列

来自分类Dev

无法以编程方式向图层添加要素

来自分类Dev

以编程方式向视图添加约束

来自分类Dev

以编程方式添加按钮的不同单击

来自分类Dev

无法单击以编程方式添加的按钮

来自分类Dev

Swift Spritekit以编程方式添加按钮

来自分类Dev

无法单击以编程方式添加的按钮

来自分类Dev

以编程方式添加的按钮无法正确响应

来自分类Dev

以编程方式在视图顶部的添加按钮

来自分类Dev

销毁以编程方式多次添加的按钮

来自分类Dev

以编程方式添加的按钮不显示文本

来自分类Dev

向按钮添加操作,错误代码

来自分类Dev

如何以编程方式向 StackView 中的每个按钮添加单独的选择器/侦听器 swift 4.2

来自分类Dev

以编程方式向电子邮件添加签名

Related 相关文章

热门标签

归档