我正在尝试向我的应用添加信息按钮以提供自定义帮助。
我决定以编程方式添加按钮,而不是将按钮添加到笔尖并将事件(touchUpInside)链接到控制器。按钮出现。当我在触摸按钮时添加要执行的目标事件处理程序时,它不起作用。接触按钮时没有调用我的方法(doHelp)。
当我调试它时,事件未在按钮中注册!虽然代码不会抛出任何异常。
以下是视图中的代码段:
// Create a Button to get Help
UIButton *helpButton = [UIButton buttonWithType:UIButtonTypeInfoDark ] ;
buttonRect = helpButton.frame;
// CALCulate the bottom right corner
buttonRect.origin.x = rect.size.width - buttonRect.size.width - 8;
buttonRect.origin.y = rect.size.height - buttonRect.size.height - 8;
[helpButton setFrame:buttonRect];
[helpButton addTarget:self action:@selector(doHelp:) forControlEvents:UIControlEventTouchUpInside];
[helpButton setEnabled:TRUE];
[self addSubview:helpButton];
........
// Another METHOD ELSEWHERE in the VIEW object
-(void)doHelp:(id)Sender
{
[self setHelpNeeded:TRUE];
[self setNeedsDisplay];
}
我做错了什么? 我查看了SDK帮助和示例,我真的很沮丧! 我希望另一双眼睛会有所帮助! : - )
如果您需要了解,此代码段位于View对象中。 我刚刚添加了doHelp来帮助前2个响应者......谢谢。
**更新6/4/09 ** - 我整晚都在努力,没有任何效果。我认为设置方法选择器的方式有问题,因为我的方法永远不会被调用。其他一切看起来都不错。即使使用NIB文件也不起作用。我已经标记了按钮,检索了它并添加了方法选择器但无济于事。有一些根本就是我做错了......唉! 任何想法,任何人?
答案 0 :(得分:4)
终于解决了!!!并学到了一些回报。我花了几天时间来解决这个问题。
我的UIButton对象无法正常工作的原因是因为我发现在UIIMageView对象的情况下:
“initWithImage:此方法调整接收器的帧以匹配指定图像的大小。它还默认禁用图像视图的用户交互。”
我的UIButton已被指定为UIImageView控件的子视图!!!
没有错误/警告。它只是安静地被禁用了。
解决方案:创建了一个容器UIView对象,该对象现在包含UIImageView和按钮,以便按钮在图像上显示为叠加,但它实际上是图像的兄弟和虚拟的子视图容器UIView。
答案 1 :(得分:1)
已经有一段时间了,但我认为你的addTarget需要获取包含doHelp:选择器的对象,如下所示:
[helpButton addTarget:self action:@selector(doHelp:)];
假设您拥有相同视图中的某个位置:
- (void)doHelp: { }
将nil传递给addTarget意味着您将该选择器发送给没有收件人。
答案 2 :(得分:0)
问题在于你addTarget:nil
。您为行动提供的选择器只是它将发送给目标的消息。你没有给它一个目标,因此它不知道如何处理该消息。您可能希望在self
而不是nil
传递。
答案 3 :(得分:0)
我在谷歌搜索同一问题的解决方案时遇到了这个问题。至少使用3.x SDK,您所要做的就是将UIImageView的UserInteractionEnabled属性设置为YES。
感谢你发布关于这个问题的发现,我甚至都不会想到那个。
答案 4 :(得分:0)
我遇到了类似的问题,其中按钮位于视图之外且没有收到点击消息
有助于设置父视图的背景颜色,以查看该按钮位于其外部:
...
[buttonParentView addSubview: myButton];
buttonParentView.backgroundColor = [UIColor cyanColor];