UIButton以编程方式在iOS中不起作用

时间:2015-03-12 10:31:39

标签: ios objective-c xcode

当我点击UIButton时没有发生任何事情

checkbox = [[UIButton alloc] initWithFrame:CGRectMake(73, 324, 15, 15)];
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal];
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox-checked.png"] forState:UIControlStateSelected];
[checkbox addTarget:self action:@selector(autologin) forControlEvents:UIControlEventTouchUpInside];
[self.background addSubview:checkbox];

4 个答案:

答案 0 :(得分:2)

你必须创建如下的按钮。

UIButton *checkbox = [UIButton buttonWithType:UIButtonTypeCustom]; // this is important
checkbox.frame = CGRectMake(73, 324, 15, 15)];
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox.png"] forState:UIControlStateNormal];
[checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox-checked.png"] forState:UIControlStateSelected];
[checkbox addTarget:self action:@selector(autologin) forControlEvents:UIControlEventTouchUpInside];
[self.background addSubview:checkbox];

您必须首先使用按钮属性创建按钮,然后给它的框架。

如果仍无效,则self.background addSubview应为self.view addSubview

什么是self.background

答案 1 :(得分:0)

检查userInteractionEnabled媒体资源的background属性。

但我明白为什么如果休息没问题就没有关于按钮的反馈 - 当按钮触摸时你使用UIControlStateSelected来设置图像,但你必须使用UIControlStateHighlighted

答案 2 :(得分:0)

你的代码非常好。您需要检查以下内容。

  • 检查 self.background 是否已正确放置在视图中,我使用 self.view 代替 self.background 尝试了您的代码如下所示,它完美无缺。
self.checkbox = [[UIButton alloc] initWithFrame:CGRectMake(73, 324, 50, 50)];
[self.checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox1.png"] forState:UIControlStateNormal];
[self.checkbox setBackgroundImage:[UIImage imageNamed:@"checkbox2.png"] forState:UIControlStateSelected];
[self.checkbox addTarget:self action:@selector(autologin) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.checkbox];
  • 从您提供的错误消息中 “

    警告:尝试在视图不在窗口层次结构中的<enter_the_den: 0x7fbf1bd4c4e0>上显示<ViewController: 0x7fbf1bc771c0>

我怀疑问题出现在方法 autologin 中的代码中,只是注释方法中的所有代码,只是尝试一个日志,它应该可以工作。

请参阅:whose view is not in the window hierarchy

答案 3 :(得分:0)

如果您阅读Apple Documentation for UIButton并查看标记为创建按钮的标题下,您会发现创建UIButton的方法是使用buttonWithType:而不是initWithFrame:

  

返回值

     

新创建的按钮。

     

<强>讨论

     

此方法是一种便捷构造函数,用于创建具有特定配置的按钮对象。如果您继承UIButton,则此方法不会返回子类的实例。如果要创建特定子类的实例,则必须直接分配/初始化该按钮。

     

创建自定义按钮(即UIButtonTypeCustom类型的按钮)时,按钮的框架最初设置为(0,0,0,0)。在将按钮添加到界面之前,应将帧更新为更合适的值。

唯一一次将alloc/initUIButton一起使用的情况是,当您有子类UIButton时,您的init方法应该实现buttonWithType:并传入{{ 1}}。

所以改变:

UIButtonTypeCustom

checkbox = [[UIButton alloc] initWithFrame:CGRectMake(73, 324, 15, 15)];