UIButton的图像滚动与滚动视图,但其行动/方法保持原来的位置

我有一个自动滚动的UIScrollView,我使用initWithFrame创build了几个button,每个button都有一个图像和一个独特的动作(方法),并将它们全部添加到滚动视图中。 button的图像可以滚动自动滚动视图,但是当我点击每个button,这不是我分配给该button的方法。 当我点击相同的位置时,不pipe哪个button通过,它将采用相同的方法,而不是button的方法。 下面是我创buildbutton的代码:

for (int i = 0; i < 4; i++) { //create an imageView object in every 'page' of the scrollView. CGRect frame; frame.origin.x = 62 * i; frame.origin.y = 0; frame.size = CGSizeMake(52.0, 52.0); myButton = [[UIButton alloc] initWithFrame:frame]; [myButton setImage:[MyImageArray objectAtIndex:i] forState:normal]; switch (i) { case 0: [myButton addTarget:self action:@selector(aMethod0) forControlEvents:UIControlEventTouchUpInside]; break; case 1: [myButton addTarget:self action:@selector(aMethod1) forControlEvents:UIControlEventTouchUpInside]; break; case 2: [myButton addTarget:self action:@selector(aMethod2) forControlEvents:UIControlEventTouchUpInside]; break; case 3: [myButton addTarget:self action:@selector(aMethod3) forControlEvents:UIControlEventTouchUpInside]; break; default: break; } [self.MyScrollView addSubview:myButton]; 

下面是自动滚动scrollview的代码:

 - (void)move_pagination { UIPageControl *pgCtr = MyPageControl; CGFloat contentOffset = MyScrollView.contentOffset.x; __block int nextPage = (int)(contentOffset/(MyScrollView.frame.size.width+10)) + 1 ; [UIView animateWithDuration:10 delay:0 options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction animations:^{ if( nextPage!=3 ) { MyScrollView.contentOffset = CGPointMake(nextPage*(10+MyScrollView.frame.size.width), 0); pgCtr.currentPage=nextPage; // else start sliding from 1 :) } else { nextPage = 1; MyScrollView.contentOffset = CGPointMake(0, 0); MyScrollView.contentOffset = CGPointMake(nextPage*(10+MyScrollView.frame.size.width), 0); pgCtr.currentPage=2; } } completion:nil]; } 

任何线索为什么这种奇怪的行为发生? 谢谢。

试试这个代码

在你的视图中加载方法

  float x=62; for(int i=0;i<4;i++) { self.stack=[UIButton buttonWithType:UIButtonTypeCustom]; self.stack.frame=CGRectMake(x+(62*i), 100, 52, 52); [self.stack setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [self.stack setTitle:[self.titleName objectAtIndex:i] forState:UIControlStateNormal]; [self.stack setBackgroundColor:[UIColor redColor]]; self.stack.tag=i; [self.stack addTarget:self action:@selector(actionMethod:) forControlEvents:UIControlEventTouchUpInside]; //your scroll view //[self.scrView addSubview:self.btnlabe1]; [self.view addSubview:self.stack]; } 

并创build像这样的方法…

 -(void)actionMethod:(id)sender { UIButton *button=(UIButton *)sender; switch (button.tag) { case 0: NSLog(@"ACTIONMETHOD CODE HERE"); break; case 1: NSLog(@"ACTIONMETHOD1 CODE HERE"); break; case 2: NSLog(@"ACTIONMETHOD2 CODE HERE"); break; case 3: NSLog(@"ACTIONMETHOD3 CODE HERE"); break; default: break; } } 

编辑的代码

 float x=62; for(int i=0;i<4;i++) { self.stack=[UIButton buttonWithType:UIButtonTypeCustom]; self.stack.frame=CGRectMake(x+(62*i), 100, 52, 52); [self.stack setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [self.stack setTitle:[temp objectAtIndex:i] forState:UIControlStateNormal]; [self.stack setBackgroundColor:[UIColor redColor]]; switch (i) { case 0: [self.stack addTarget:self action:@selector(aMethod0) forControlEvents:UIControlEventTouchUpInside]; break; case 1: [self.stack addTarget:self action:@selector(aMethod1) forControlEvents:UIControlEventTouchUpInside]; break; case 2: [self.stack addTarget:self action:@selector(aMethod2) forControlEvents:UIControlEventTouchUpInside]; break; case 3: [self.stack addTarget:self action:@selector(aMethod3) forControlEvents:UIControlEventTouchUpInside]; break; default: break; } //your scroll view //[self.scrView addSubview:self.stack]; [self.view addSubview:self.stack]; } 

和方法

 -(void)aMethod0 { NSLog(@"action 0"); } -(void)aMethod1 { NSLog(@"action 1"); } -(void)aMethod2 { NSLog(@"action 2"); } -(void)aMethod3 { NSLog(@"action 3"); }