2009-06-03 70 views
1

我想向我的应用添加信息按钮以提供自定义帮助。iPhone SDK 2:以编程方式添加信息按钮

不是将按钮添加到笔尖并将事件(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个响应者...谢谢。

**更新09年6月4日** - 我一直在尝试整夜,没有任何工作。我认为我设置方法选择器的方式有问题,因为我的方法永远不会被调用。其他一切都很好。即使使用NIB文件也不起作用。我已经标记了按钮,检索它并添加了方法选择器,但无济于事。有什么基本的,我做错了...啊! 任何想法,任何人?

+0

由于没有工作到目前为止...我将恢复到基于NIB的方式。 基本上创建一个视图+控制器组合,并从那里去,这工作。 – 2009-06-04 03:49:10

+0

说得太快......它没有工作。 :-(。这让我感到很开心! 我写了一个小应用程序来测试基础知识,它在其中起作用,所以这与我设置控制器的方式有关......我要去再次发布这个问题的附加信息,看看是否有人有任何想法如何做到这一点。 – 2009-06-05 18:43:47

回答

4

终于解决了!并学会了一些回报。花了我几天的时间才弄清楚这一点。

的原因,我的UIButton对象没有工作是因为我发现,在一个UIImageView对象的情况下:

“initWithImage:此方法调整接收器的框架以匹配指定的图像大小也在默认情况下禁用图像视图的用户交互。“

而我的UIButton已被指定为UIImageView控件的子视图!

没有错误/警告。它只是安静地被禁用。

:创建一个容器的UIView对象,其现在包含的UIImageView和按钮,以使按钮显示为覆盖在所述图像,但它实际上是图像的兄弟和虚设容器的UIView的子视图。

+0

司长, ks发布这么多...虽然解决方案可以是这样的或启用UIImageView的用户交互,很容易忘记这一点。当我发现你的帖子时,我自己感到困惑......谢谢! 温馨的问候, Abhinav – Abhinav 2010-03-09 20:42:49

1

它已经一段时间,但我觉得你的addTarget需要采取包含doHelp对象:选择,就像这样:

[helpButton addTarget:self action:@selector(doHelp:)]; 

在同一视图的地方假设你有:

- (void)doHelp: { } 

将nil传递给addTarget意味着您将该选择器发送给没有收件人。

+0

我的坏...在我的代码中我有自己的目标。它仍然无法正常工作。我只是试着零如果在目标中指定了nil,它会向响应者链发送操作 – 2009-06-04 00:04:55

+0

我的目标方法是

 -(void)doHelp:(id)Sender { \t [self setHelpNeeded:TRUE]; \t [self setNeedsDisplay]; } 
方法签名有什么问题吗? – 2009-06-04 00:05:39

0

问题在于你的addTarget:nil那里。您为其采取行动的选择器只是它将发送给其目标的消息。你没有给它一个目标,所以它不知道如何处理这个消息。你可能想要通过self而不是nil那里。

+0

UR正确。甚至发送Self作为目标不行。:-( – 2009-06-04 00:06:17

0

我偶然发现了这个问题,同时用Google解决了同样的问题。至少在3.x SDK中,你所要做的就是将UIImageView的UserInteractionEnabled属性设置为YES。

感谢您发布有关该问题的发现,我甚至不会想到看那个。

0

我也有类似的问题,即按钮则认为外界并没有得到自来水消息

什么帮助是设置父视图的背景颜色,一看就知道按钮在它之外:

... 
[buttonParentView addSubview: myButton]; 
buttonParentView.backgroundColor = [UIColor cyanColor]; 
相关问题