Проблемы с обработкой касаний к subviews (uiviews) в UIScrollView

Я создал UIScrollView с использованием кода, и я создал подпредставления, которые я создаю динамически из БД, которые добавляются в массив представлений и в UIScrollview. Я использую методы touchesBegan и touchesMoved. Подпредставление, которое я выбираю, не распознается , но элемент управления переходит в touchesBegan и касается перемещенного метода. Я разместил код ниже. Пожалуйста, помогите мне решить эту проблему.

Я создал код прокрутки, и у меня есть подпредставления в массиве с именем "arrayofviews". Эти подпредставления являются теми же представлениями, что и в массиве. Я могу переместить эти подпредставления, которые находятся из БД, в обычном представлении, но когда Я добавил эти представления в scrollview, они не работают.

Я перепробовал так много решений, которые есть в сети, но не смог найти подходящего.

.m файл

- (void)viewDidAppear:(BOOL)animated
{

 scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, 374)];
 scrollview.backgroundColor=[UIColor clearColor];
 [scrollview setScrollEnabled:YES];
 [scrollview setContentSize:CGSizeMake(300, 600)];
 scrollview.showsVerticalScrollIndicator = YES;
 scrollview.delaysContentTouches=NO;

    .
 .
 .
 .
    //here i am retrieving the controls from the DB and adding into the "arrayofviews" array which is an NSMutableArray

    //I have added subviews in this part to the scroll like
    [scrollview addSubview:vw1];

    [scrollview addSubview:vw2];

 .
 .
 .

 scrollview.userInteractionEnabled=NO;
 scrollview.scrollEnabled=FALSE;
 [self.view addSubview:scrollview];

 [self.view bringSubviewToFront:scrollview];


}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
 scrollview.userInteractionEnabled=YES;
 [self.nextResponder touchesBegan:touches withEvent:event];
 UITouch *touch = [[event allTouches] anyObject];

 CGPoint touchLocation;
 touchLocation.x=scrollview.contentOffset.x;
 touchLocation.y=scrollview.contentOffset.y;
 for(UIView *vw in arrayOfViews)
 {
  vw.userInteractionEnabled=YES;
  if([touch view]==vw)
  {
   vw.center=touchLocation;
  }
 }

}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event  //method to intiate the touch events
{
 [self.nextResponder touchesMoved:touches withEvent:event]; 
 UITouch *touch = [[event touchesForView:scrollview] anyObject];
 CGPoint touchLocation1;
 touchLocation1.x=scrollview.contentOffset.x;
 touchLocation1.y=scrollview.contentOffset.y;
 for(UIView *vw in arrayOfViews)
 {
  if([touch view]==vw)
  {
   vw.center=touchLocation1;   //statement to move the control
  }
 }

}


person Sankar Chandra Bose    schedule 20.01.2011    source источник


Ответы (1)


изменить строку

scrollview.userInteractionEnabled = НЕТ;

to

scrollview.userInteractionEnabled = ДА;

причина

userInteractionEnabled сообщает устройству, следует ли принимать события касания. Когда вы отключили прикосновение к scrollView, тогда как он мог получать события касаний ...

ваше здоровье!!!

person Waqas Raja    schedule 20.01.2011
comment
Спасибо за ответ Waquas, но метод Touchevents запускается. Я хочу, чтобы касания были включены для подпредставлений, а не для прокрутки. - person Sankar Chandra Bose; 20.01.2011
comment
фактически, когда вы устанавливаете userInteractionEnabled = NO; затем взаимодействие с пользователем также было отключено для подпредставлений. и когда взаимодействие с пользователем отключено, то, в свою очередь, события касаний не запускаются. Попробуй. - person Waqas Raja; 21.01.2011