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.
Просто снимите этот флажок на боковой панели, и вы должны быть готовы.