iPhone SDK 2:以编程方式添加信息按钮

时间:2009-06-03 23:47:08

标签: iphone button

我正在尝试向我的应用添加信息按钮以提供自定义帮助。

我决定以编程方式添加按钮,而不是将按钮添加到笔尖并将事件(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文件也不起作用。我已经标记了按钮,检索了它并添加了方法选择器但无济于事。有一些根本就是我做错了......唉! 任何想法,任何人?

5 个答案:

答案 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];