UIButton не запускает цель на touchUpInside, если я не тяну только снаружи - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть кнопка, которая, когда я нажимаю ее, не запускает селектор цели, который я добавил.Я сделал кнопку «Разные изображения», чтобы я мог видеть, что я нажимаю ее.

Итак, вот что смешно, если я нажимаю, и перетаскиваю за пределы кнопки, но не за пределы непосредственного супервизора кнопки,Селектор цели срабатывает!

Я также в тестировании установил setClipsToBounds: YES для всех суперпредставлений / суб-представлений, просто чтобы убедиться, что он все еще находится в границах представлений.Кажется, в пределах границ.Перетаскивание за пределы области кнопок выглядит всенаправленным, поэтому я не могу только нажимать / перетаскивать вправо.Слева вверх и вниз, работа тоже.Я могу нажать, перетащить затем обратно, и это работает.Если я не начинаю перетаскивать и просто нажимаю и удерживаю, кнопка подсвечивается и затем возвращается в невыбранное состояние.

Вот код для кнопки.Кнопка находится в UIView вместе с UITextView, на самом деле OnTop Of UITextView.UIView, в котором все это включено, находится в увеличенном виде, в режиме масштабирования / прокрутки

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

1 Ответ

0 голосов
/ 28 февраля 2012

Я закончил. Просто добавив шестерню в качестве изображения в представление, затем создал невидимую кнопку того же размера, что и 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];
        }
    }
...