2014-09-26 49 views
1

UIScrollView内有一些UIButtons。第一次加载视图时,UIScrollView中显示的按钮大约有8个,所有这些按钮都是可见和可点击的。UIButtons不能点击UIScrollView编程后添加

但是,一旦我滚动,当最初加载视图时不在那里的任何按钮都不可点击。

鉴于我有一个函数,以编程方式创建每个按钮视图加载,是否有可能addTarget函数不起作用?我在开始时创建约280个按钮,并以编程方式添加UITouchUpInside事件。

- 编辑 -

这是或多或少的代码,称为viewDidLoad中函数内部

for (int i = 0; i < numberOfButtons; i++){ 
    //Display stuff here 
    MyButton *aButton = [[MyButton alloc] initWithFrame:CGRectMake(x,y,w,h)]; 
    [aButton.titleLabel setFont:[UIFont fontWithName:@"QuicksandBook-Regular" size: 17.0]]; 
    [aButton setTitle:[currentDisplayArray objectAtIndex:i] forState:UIControlStateNormal]; 
    [aButton addTarget:self 
       action:@selector(didPressButton:) 
    forControlEvents:UIControlEventTouchUpInside]; 
    [aButton setUserInteractionEnabled:TRUE]; 
    NSLog(@"width of button = %f height = %f", [aButton frame].size.height, [aButton frame].size.width); 
//I printed this to check the height and width were generated correctly. 
    [btnContainerView addSubview:aButton]; //UIView hooked up to storyboard 
    [buttonArray addObject:aButton]; //Array to maintain reference to all buttons 
} 

记住,他们都显示正常,它只是没有在渲染的那些初始框架不会触发“didPressButton”选择器。

- 编辑 -

玩弄后,我认为它的某种与UIScrollView它是在问题这是某种苹果的bug?我甚至尝试在scrollViewDidScroll函数中添加手势识别器。

- 编辑 - 另一个有趣的提示,如果我使UIScrollView更大,我可以点击更多的按钮,如果我使它更小,我可以点击更少。它肯定与第一个呈现的按钮有关。

也许iOS说它初始化按钮,但不保存内存中所有200+按钮的选择器。或者每个班级都有内置的可能的选择器/手势识别器。

+0

你能分享一些代码吗?至少是你编程创建按钮的部分。 – 2014-09-26 11:30:44

+0

你去了:) – FaddishWorm 2014-09-26 13:29:03

+0

请检查你是否在你的方法后面加了(:) – 2014-09-26 13:34:36

回答

-1

我希望你用手势诠释视图控制器,如果这样你就可以使用下面的代码

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
     if (([touch.view isKindOfClass:[UIButton class]] && touch.view.tag==<Btn_Tag>)) { 
      return NO; 
     } 
     return YES; 
    } 

当使用手势,手势将首先作出反应,而不是按钮action.So,这段代码将有助于移动响应者按钮的动作。

+0

没有抱歉,我试过一个手势识别器,虽然它适用于渲染的按钮,但它不会影响最初滚动范围之外的那些。 – FaddishWorm 2014-09-26 13:47:13

+0

一旦删除手势并检查它是否工作或不正常。那么我们可以检查另一个解决方案 – 2014-09-26 13:49:20

+0

我面临同样的问题,这个解决方案为我工作 – 2014-09-26 13:51:05

1

耶,我解决了。

有一个UIView坐在UIScrollView的前面,按钮被添加到。

视图大小相同,但只有位于初始边界(UIView大小)内的按钮才可点击。

有一个UIView,我认为它被称为btnContainerView什么的。发生了什么是按钮被添加到此UIView而不是UIScrollView。

我认为UIView被设置为按钮的委托,因为那是他们被渲染。所以当UIScrollView收到一个输入时,降压停在那里。在按钮上调用addTarget:self将意味着他们的目标被添加到scrollView,但它们被渲染到UIView上。一个令人困惑的错误,因为你会期望UIScrollView不能正确滚动和渲染,但它确实,它只是选择器的代表变得困惑。

感谢大家的帮助,这是非常棘手的,因为按钮滚动正确(UIScrollView有触摸输入),但UIButtons没有得到触摸输入。

TL; DR;解决方案是删除interjitary UIView,因为它是干扰