【问题标题】:iPhone UIButton addTarget:action:forControlEvents: not workingiPhone UIButton addTarget:action:forControlEvents: 不工作
【发布时间】:2010-03-13 02:38:28
【问题描述】:

我看到这里发布了类似的问题,但没有一个解决方案适合我。如下:

我在 UIView 框架内有一个 UIButton 实例,该实例位于另一个 UIView 框架内,该框架位于主窗口 UIView 中。也就是说:

UIWindow 
--> UIView (searchView)
  --> UISearchBar (findField)
  --> UIView (prevButtonView)
    --> UIButton (prevButton)
  --> UIView (nextButtonView)
    --> UIButton (nextButton)

到目前为止,一切都很好:一切都按照我的意愿布置。但是,这些按钮不接受任何类型的用户输入。我正在使用 UIButton 方法 addTarget:action:forControlEvents: 为了让您了解我在做什么,这是我的 nextButton 代码:

nextButton = [UIButton buttonWithType:UIButtonTypeCustom];
[nextButton setImage:[UIImage imageNamed:@"find_next_on.png"] forState:UIControlStateNormal];
[nextButton setImage:[UIImage imageNamed:@"find_next_off.png"] forState:UIControlStateDisabled];
[nextButton setImage:[UIImage imageNamed:@"find_next_off.png"] forState:UIControlStateHighlighted];
[nextButton addTarget:self action:@selector(nextResult:) forControlEvents:UIControlEventTouchUpInside];

nextResult: 方法永远不会被调用,按钮的状态不会在触摸时改变,而且我没有做任何该死的事情来让它工作。我认为所有这些视图层都存在问题:也许我的按钮顶部有东西,但我不确定它可能是什么。

为了信息过载,我找到了一些代码,可以打印出我所有的视图信息。这就是我的整个视图层次结构:

UIWindow
{{0, 0}, {320, 480}}
UILayoutContainerView
{{0, 0}, {320, 480}}
    UINavigationTransitionView
    {{0, 0}, {320, 480}}
        UIViewControllerWrapperView
        {{0, 64}, {320, 416}}
            UIView
            {{0, 0}, {320, 416}}
                UIWebView
                {{0, 44}, {320, 416}}
                    UIScroller
                    {{0, 0}, {320, 416}}
                        UIImageView
                        {{0, 0}, {54, 54}}
                        UIImageView
                        {{0, 0}, {54, 54}}
                        UIImageView
                        {{0, 0}, {54, 54}}
                        UIImageView
                        {{0, 0}, {54, 54}}
                        UIImageView
                        {{-14.5, 14.5}, {30, 1}}
                        UIImageView
                        {{-14.5, 14.5}, {30, 1}}
                        UIImageView
                        {{0, 0}, {1, 30}}
                        UIImageView
                        {{0, 0}, {1, 30}}
                        UIImageView
                        {{0, 430}, {320, 30}}
                        UIImageView
                        {{0, 0}, {320, 30}}
                        UIWebDocumentView
                        {{0, 0}, {320, 21291}}
                UIView
                {{0, 0}, {320, 44}}
                    UISearchBar
                    {{10, 8}, {240, 30}}
                        UISearchBarBackground
                        {{0, 0}, {240, 30}}
                        UISearchBarTextField
                        {{5, -2}, {230, 31}}
                            UITextFieldBorderView
                            {{0, 0}, {230, 31}}
                            UIPushButton
                            {{205, 6}, {19, 19}}
                            UIImageView
                            {{10, 8}, {15, 15}}
                            UILabel
                            {{30, 7}, {163, 18}}
                    UIView
                    {{290, 15}, {23, 23}}
                        UIButton
                        {{0, 0}, {0, 0}}
                            UIImageView
                            {{-12, -12}, {23, 23}}
                    UIView
                    {{260, 15}, {23, 23}}
                        UIButton
                        {{0, 0}, {0, 0}}
                            UIImageView
                            {{-12, -12}, {23, 23}}
    UINavigationBar
    {{0, 20}, {320, 44}}
        UINavigationButton
        {{267, 7}, {48, 30}}
            UIImageView
            {{0, 0}, {48, 30}}
            UIButtonLabel
            {{11, 7}, {26, 15}}
        UINavigationItemView
        {{79, 8}, {180, 27}}
        UINavigationItemButtonView
        {{5, 7}, {66, 30}}
MBProgressHUD
{{0, 0}, {320, 480}}
    UIActivityIndicatorView
    {{141, 206}, {37, 37}}
    UILabel
    {{117, 247}, {86, 27}}

相关部分在 UINavigationBar 部分上方注明。

有人有什么建议吗?我都出来了。

感谢阅读。

亚伦。

【问题讨论】:

    标签: cocoa-touch iphone-sdk-3.0 uibutton


    【解决方案1】:

    我想通了,所以为了后代的缘故,这是交易。

    最初,我通过将按钮嵌套到 UIView 中并设置它们的框架属性来定位按钮。我能够通过利用 UIButton 对 UIView 的父辈来做同样的事情来简化这一点。所以我拿走了嵌套视图并声明了 UIButton 的位置,如下所示:

    nextButton.frame = CGRectMake(searchView.frame.size.width - 30, 15, 23, 23);
    

    但这并没有解决我的问题;它只是让我的代码更精简。原来是我的框架 X 属性的计算导致了这个问题。当我这样重构时:

    NSInteger nextX = searchView.frame.size.width - 30;
    nextButton.frame = CGRectMake(nextX, 15, 23, 23); 
    

    一切都重新开始了。去图吧。

    干杯! 亚伦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多