UIButton внутри прокрутки не вызывает действия

У меня есть представление под названием subADCview внутри scrollView, этот subADCView генерирует кнопку динамически. В настоящее время, если количество кнопок не помещается в одну строку (т.е. в моем subADCview, который имеет ширину около 320 и высоту 54), высота представления увеличивается и становится прокручиваемой. И есть также возможность удалить кнопки. Теперь, если у меня есть большее количество кнопок в нескольких строках и я просто просто удаляю их, это работает нормально, и никаких проблем не возникает, однако, если я прокручиваю и удаляю кнопки, это работает, пока кнопка не подойдет к одной строке, как только представление уменьшает содержание кнопок в одну строку, кнопки внутри не запускают действие. Странный!! Однако это работает, если я не прокручиваю и просто удаляю кнопки. Я не знаю, в чем проблема с прокруткой, как только я делаю прокрутку, а затем удаляю кнопки, они работают, пока они не поместятся в одну строку. Я использовал жесты касания и все, и касание запускает метод жеста касания и возвращает "НЕТ", но при этом не запускается действие кнопки "знак", кажется, что кнопка отключена, но журнал сообщает, что она включена. Ниже мой код с некоторыми журналами. Ценю, если вы можете помочь.

// Нажмите раздел жестов

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{

    NSLog(@"touchview:%@,tag:%d",[touch.view class], touch.view.tag);

    if ([touch.view isKindOfClass:[UIButton class]])
    {
        UIButton *btn=(UIButton*)touch.view ;

        NSLog(@"Properties:%@,%hhd,%hhd",btn,btn.userInteractionEnabled,btn.enabled);

    }

    if (self.scrollView.superview != nil)
    {
        if ([touch.view isKindOfClass:[UIButton class]]||[touch.view.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview isKindOfClass:[UITableViewCell class]])

        {
           NSLog(@"Value returned is NO");
            return NO; // ignore the touch
        }

    }


     NSLog(@"Value returned is YES");
    return YES; // handle the touch


}

// Это функция для запуска действия кнопки

 -(void)btnSelected:(UIButton *)button
    {
        NSLog(@"Button %ld Clicked",(long int)[button tag]);



        if (button.tag==0)
        {
            [self pushToGroupCategorySelection];
            for (id btn in self.subADCView.subviews)
            {
                if ([btn tag]!=-999)
                {
                    if ([btn isKindOfClass:[UIButton class]])
                    {
                        [btn removeFromSuperview]; //remove buttons
                    }
                }

            }
            _subADCView.frame=CGRectMake(_subADCView.frame.origin.x, _subADCView.frame.origin.y, _subADCView.frame.size.width, 54.0);

        }
        else
        {
            if (_categoryEditDetails.count==1)
            {
                showAlert(@"Message", @"Group Should Have Atleast 1 category", STRING_CONSTANT_OK,nil);
            }
            else
            {
                [categoryListDeleted addObject:[@{
                                                  @"id": [NSString stringWithFormat:@"%ld",(long)button.tag]

                                                  } mutableCopy]] ;

                for (id btn in self.subADCView.subviews)
                {
                    if ([btn tag]!=-999)
                    {
                        if ([btn isKindOfClass:[UIButton class]])
                        {
                            [btn removeFromSuperview]; //remove buttons
                        }
                    }

                }
                _subADCView.frame=CGRectMake(_subADCView.frame.origin.x, _subADCView.frame.origin.y, _subADCView.frame.size.width, 54.0);

                for (NSUInteger i=0;i<_categoryEditDetails.count;i++)
                {
                    if ([[[_categoryEditDetails objectAtIndex:i]valueForKey:@"id"] caseInsensitiveCompare:[NSString stringWithFormat:@"%ld",(long)button.tag]]==NSOrderedSame)
                    {
                        [_categoryEditDetails removeObjectAtIndex:i];
                        break;
                    }
                }
                [self addDynamicButtonsForCategories];
            }
        }
    }

Это журнал, когда он работает, когда кнопки находятся в одной строке, прежде чем я сделал прокрутку

touchview:UIButton,tag:104
Properties:<UIButton: 0xcc99810; frame = (146 0; 134 40); opaque = NO; tag = 104; layer = <CALayer: 0xcca5290>>,1,1
Value returned is NO
Button 104 Clicked

Это журнал, когда он не работает, когда кнопки находятся в одной строке после прокрутки

touchview:UIButton,tag:104
Properties:<UIButton: 0xd97f5d0; frame = (146 0; 134 40); opaque = NO; tag = 104; layer = <CALayer: 0xd97a810>>,1,1
Value returned is NO

Обратите внимание, что в обоих случаях жест касания сработал, и он распознает касание кнопки, но во втором случае действие кнопки не сработало. Я был бы очень признателен за любое решение для устранения этой проблемы или если бы вы могли дать мне больше советов по детальному устранению неполадок.

2 ответа

Решение

Я не смог выяснить точную проблему, но я думаю, что это было связано с проблемой с размером представления и размером содержимого прокрутки, хотя в журнале все было хорошо. В любом случае я удалил свой subADCview и добавил динамические кнопки прямо в мой scrollview, и он отлично работал без проблем.

В XCode 5 с iOS 7 есть ошибка, из-за которой эту проблему можно решить, отключив AutoLayout.

Просто снимите этот флажок на боковой панели, и вы должны быть готовы.

Другие вопросы по тегам