除非我在外面拖动,否则UIButton不会触发touchUpInside上的目标?

时间:2012-02-03 07:20:08

标签: objective-c uiview uiscrollview uibutton selector

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

所以这就是搞笑,如果我按下,并拖动按钮外,但不是在按钮的直接超级视图之外,目标选择器被触发!

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

这是Button的代码。 Button与UITextView一起位于UIView上,实际上是UITextView的onTop。所有这些都在的UIView是在一个更大的视图上,它在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];

Scroll View上有几个手势识别器。虽然它们似乎不会干扰我放在屏幕上的其他按钮和控件。虽然我觉得Scroll View就是问题所在。

滚动查看代码片段:

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

1 个答案:

答案 0 :(得分:0)

我最终只是将齿轮作为图像添加到视图中,然后创建了一个隐形按钮,其大小与我放置齿轮图标的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];
        }
    }