使用setFrame改变位置后,UIButton无法响应触摸事件

4
我有一个视图控制器类(子类),它继承自视图控制器类(父类)。在父类的loadView()方法中,我创建了一个名为myButtonView的子视图,其中包含两个按钮(水平布局在子视图中),并将其添加到主视图中。在子类中,我需要将这两个按钮上移50像素。
因此,我通过调用setFrame方法来移动buttonView。这使按钮移动并正确地呈现,但在此之后它们不响应触摸事件。在父类类型的视图中,按钮可以正常工作。在子类类型的视图中,如果我注释掉setFrame()调用,按钮也可以正常工作。
如何移动这些按钮并使它们仍然响应触摸事件?
感谢任何帮助。
以下是代码片段。
在父类中:
- (void)loadView {

// Some code...
    CGRect buttonFrameRect = CGRectMake(0,yOffset+1,screenRect.size.width,KButtonViewHeight);
    myButtonView = [[UIView alloc]initWithFrame:buttonFrameRect];
    myButtonView.backgroundColor = [UIColor clearColor];
    [self.view addSubview:myButtonView];

// some code... 
    CGRect nxtButtonRect = CGRectMake(screenRect.size.width - 110, 5, 100, 40);
    myNxtButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [myNxtButton setTitle:@"Submit" forState:UIControlStateNormal];
    myNxtButton.frame = nxtButtonRect;
    myNxtButton.backgroundColor = [UIColor clearColor];

    [myNxtButton addTarget:self action:@selector(nextButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [myButtonView addSubview:myNxtButton];

    CGRect backButtonRect = CGRectMake(10, 5, 100, 40);
    myBackButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [myBackButton setTitle:@"Back" forState:UIControlStateNormal];

    myBackButton.frame = backButtonRect;
    myBackButton.backgroundColor = [UIColor clearColor];
    [myBackButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [myButtonView addSubview:myBackButton];
// Some code... 
}

在子类中:
- (void)loadView {

    [super loadView];


//Some code ..

    CGRect buttonViewRect = myButtonView.frame;
    buttonViewRect.origin.y = yOffset; // This is basically original yOffset + 50
    [myButtonView setFrame:buttonViewRect];

    yOffset += KButtonViewHeight;

// Add some other view below myButtonView ..    
}
4个回答

9

在更改框架后,按钮可能与另一个视图重叠...只需尝试将透明的视图设置为背景颜色,这样您就可以清楚地了解哪个视图正在重叠在按钮上。


7

请确保您的UIButton的容器视图是可以互动的。这是让我困扰的一点。如果您的UIButton是另一个视图(不是您视图控制器的主要视图)的子视图,则可能未配置为允许用户交互(默认设置)。尝试:containerView.userInteractionEnabled = YES;


3

感谢大家的帮助,你们是对的。我忘记了在父视图中调整添加在按钮上方的scrollView的大小,所以它与移动的buttonView重叠。改变背景颜色帮助我看到了它。感谢Chandan的提示。


是的,那正是我的问题。我必须调整视图高度以反映按钮要占用的额外空间。谢谢。 - gmogames

2
这应该可以正常工作,我的猜测只是凭直觉,你可能有一些拦截你的触摸事件的东西。基本上,你的按钮上面有另一个视图。
祝好运。

1
通常情况下,当您的按钮高度和宽度不正确或其他视图出现在该按钮上时,会发生这种情况。检查这两种情况,也许可以解决您的问题。 - user564968

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接