【问题标题】:UIButton does not fire target on touchUpInside unless I drag just outside?UIButton 不会在 touchUpInside 上触发目标,除非我在外面拖动?
【发布时间】:2012-02-28 23:47:26
【问题描述】:

我有一个按钮,当我按下它时,它不会触发我添加的目标选择器。我已经制作了按钮不同的图像,所以我可以看到我正在按下它。

如果我按下按钮并拖动到按钮的外部,而不是按钮的直接 superView 之外,那么这里是有趣的,目标选择器被触发!

我还在测试中在所有超级/子视图上设置了 setClipsToBounds:YES,以确保它仍在视图范围内。似乎在界限之内。按钮区域外的拖动似乎是全方位的,所以它不像我只能点击/向右拖动。上下工作也一样。我可以点击,拖出然后重新进入,它可以工作。如果我没有开始拖动,只是点击并按住,按钮会突出显示,然后返回未选中状态。

这是按钮的代码。 Button 与 UITextView 一起位于 UIView 上,实际上位于 UITextView 的顶部。所有这些都在的 UIView 位于更大的 View 上,它位于 Scaling/Scrolling 视图上

        messageLookupButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 21, 20)];
        [messageLookupButton setTitle:@"junk" forState:UIControlStateNormal];
        [messageLookupButton sizeToFit];
        [messageLookupButton setTag:kGearButtonView];

            //Get the images for the buttons
        UIImage *gearButtonImage = [UIImage imageNamed:@"gear.png"];
        UIImage *gearButtonImage2 = [UIImage imageNamed:@"StatusLightOn.png"];

        [messageLookupButton setImage:gearButtonImage forState:UIControlStateNormal];
        [messageLookupButton setImage:gearButtonImage2 forState:UIControlStateHighlighted];
        [messageLookupButton addTarget:self action:@selector(gearPressed:) forControlEvents:UIControlEventTouchUpInside];

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(processLookupResults:)
                                                     name:kRefreshFromPopover object:nil];
        [self addSubview: messageLookupButton ];
        [messageLookupButton release];

        [messageLookupButton setCenter:CGPointMake(CGRectGetMaxX(elementViewContents.bounds)  -kElementContentFrameOffset  -(CGRectGetWidth( messageLookupButton.bounds)/2), CGRectGetMidY(elementViewContents.bounds))];


        [self bringSubviewToFront:messageLookupButton];

滚动视图上有几个手势识别器。尽管它们似乎不会干扰我放在屏幕上的其他按钮和控件。虽然我觉得问题在于滚动视图。

滚动查看代码片段:

[scrollContentView setUserInteractionEnabled:YES];
[scrollContentView setExclusiveTouch:YES];
[scrollContentView setCanCancelContentTouches:YES];
[scrollContentView setDelaysContentTouches:YES];

【问题讨论】:

    标签: objective-c uiview uiscrollview uibutton selector


    【解决方案1】:

    我最终只是将齿轮作为图像添加到视图中,然后创建了一个与我放置齿轮图标的 UIView 大小相同的不可见按钮。

    -(void) addMessageLookupSelector {
            // Set a default Color if there is none
        if (_isMessageLookupField ){
                // Add Gear to End Of Text Field
            if (!messageLookupImageView) {
                messageLookupImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 21, 20)];
                [messageLookupImageView setTag:kGearButtonView];
                [messageLookupImageView setImage:[UIImage imageNamed:@"gear.png"] ];
    
                [self addSubview: messageLookupImageView ];
                [messageLookupImageView release];
            }
            [self positionMessageLookupImageView ];      
        }
        [self setNeedsDisplay];
    }
    
    
    
        - (void)makeControlEditable {
    
                //Setup the TextField so we can edit its value, need to see if there is a Write Animation Assocated with Element
            [self setTheWriteTag];
            if (writeTag) {
                writeInputRequestedButton = [UIButton buttonWithType:UIButtonTypeCustom];
                [writeInputRequestedButton setFrame:elementViewContents.frame];
                [writeInputRequestedButton setUserInteractionEnabled:YES];
                [writeInputRequestedButton setEnabled:YES];
                    // [writeInputRequestedButton setBackgroundColor:[UIColor clearColor]];
                [self addSubview: writeInputRequestedButton];
                [self bringSubviewToFront:writeInputRequestedButton];
                [writeInputRequestedButton addTarget:self action:@selector(wantsToEditValue:) forControlEvents:UIControlEventTouchUpInside];
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2021-11-06
      相关资源
      最近更新 更多