UIButton 作为子视图没有响应

Posted

技术标签:

【中文标题】UIButton 作为子视图没有响应【英文标题】:UIButton as a subview not responding 【发布时间】:2015-01-28 05:16:44 【问题描述】:

我在UIView 内部有一个UIButton,在一个UIImageView 内部没有响应触摸。我不知道为什么。我已将代码分解为最简单的形式,同时仍在执行我原来的程序。

#import "TestVideoViewController.h"

@interface TestVideoViewController ()

@property (strong, nonatomic)UIImageView *panel;
@property (strong, nonatomic)UIView *panelSC;
@property (strong, nonatomic)UIButton *panelButtonSC;
@property (strong, nonatomic)UIButton *videoButton;

@end

@implementation TestVideoViewController

-(void) viewDidLoad 

    _panelButtonSC  = [UIButton buttonWithType:UIButtonTypeCustom];
    [_panelButtonSC addTarget:self action:@selector(buttonPressedSC:) forControlEvents:UIControlEventTouchUpInside];
    [_panelButtonSC setTitle:@"Open" forState:UIControlStateNormal];
    _panelButtonSC.frame = CGRectMake(511, 701, 66, 67);

    _panel = [[UIImageView alloc] initWithFrame:CGRectMake(100, 768, 824, 600)];
    _panel.backgroundColor = [UIColor whiteColor];

    _panelSC = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 784, 560)];
    _panelSC.backgroundColor = [UIColor whiteColor];

    _videoButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [_videoButton addTarget:self action:@selector(playVideo:) forControlEvents:UIControlEventTouchUpInside];
    [_videoButton setTitle:@"Play" forState:UIControlStateNormal];
    [_videoButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    _videoButton.frame = CGRectMake(400, 400, 200, 40);

    [_panelSC addSubview:_videoButton];

    [_panel addSubview:_panelSC];

    [self.view addSubview:_panel];
    [self.view addSubview:_panelButtonSC];



- (IBAction)buttonPressedSC:(UIButton*)sender 

    [self animatePanelUp];


- (IBAction)playVideo:(UIButton*)sender 

    NSLog(@"play video");


- (void) animatePanelUp 
    [UIView animateWithDuration: 0.5
                          delay: 0.0
                        options: UIViewAnimationOptionCurveEaseIn
                     animations:^
                         _panel.frame = CGRectMake(47, 166, 929, 602);
                     
                     completion:nil];



@end

我在这里查看了所有类似的答案。据我所知,我所有的框架都是正确的。一定有一些我想念的简单而愚蠢的东西。为什么“playVideo”方法永远不会触发?唯一有效的情况是我将按钮直接添加到self.view

【问题讨论】:

【参考方案1】:

UIImageView 默认将 userInteractionEnabled 设为 false - 添加以下代码行即可。

_panel.userInteractionEnabled = true;

【讨论】:

那么如果超级视图禁用了用户交互,那么它的任何子视图也会被禁用吗? 我以前从未遇到过这种情况。谢谢!我的代码中还有其他类似的问题,这对我有很大帮助。再次感谢!【参考方案2】:

当您在彼此之间添加几个子视图时,请检查您的按钮是否可点击并且没有其他子视图占用触摸事件,并且总体上确保您的视图已启用用户操作。

提示:

使用的 imageview 可能存在一些问题,因为它会默认禁用用户交互。

改用 UIView 或这样做:

_panelSC.userInteractionEnabled = true;

【讨论】:

再次阅读您的答案,您的想法是正确的,但变量错误。图像视图是 _panel 而不是 _panelSC。但你是对的,这是问题所在,需要启用用户交互。所以谢谢你。【参考方案3】:

确保父视图启用了用户交互。 UIImageView 默认 userInteractionEnabled 为 false。

_panel.userInteractionEnabled = true

【讨论】:

再次阅读您的答案,您的想法是正确的,但变量错误。图像视图是 _panel 而不是 _panelSC。但你是对的,这是问题所在,需要启用用户交互。所以谢谢你。

以上是关于UIButton 作为子视图没有响应的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 在自定义 UITableviewCell 中没有响应

我的 UIView 有一个 UIButton 作为它的子视图之一,但不响应 Objective-c 中的事件

UICollectionViewCell 中的 UIButton 子视图不更改控件状态

UIButton 永远不会在 UIImageView 的框架区域内响应

1% 的时间没有处理 UIButton 事件:我应该在我的响应链中责备谁?

UIButton 没有响应