无法触摸自定义程序化UIView中的UIButton

时间:2016-01-30 23:46:48

标签: ios iphone uiview uiviewcontroller uibutton

我有MasterChatViewController我在其中添加了一个名为JFShapedNavBar的自定义UIView作为子视图。在JFShapedNavBar内部,我添加了一个带有图像的UIButton子视图,并将一个目标操作添加到一个方法,该方法只是向控制台打印一些内容,以便立即进行调试。

MasterChatViewController包含JFShapedNavBar JFShapedNavBar包含UIButton

我使用Masonry来设置约束。初始化视图时,我使用initWithFrame:CGRectZero的自定义变体:

_shapedNavBar = [[JFShapedNavBar alloc] initWithFrame:CGRectZero
forViewController:self];
[self.view addSubview:_shapedNavBar];
[_shapedNavBar mas_remakeConstraints:^(MASConstraintMaker *make) {
    make.top.leading.trailing.equalTo(self.view);
}];

JFShapedNavBar.m

-(void)configureRightButton {
    // Right Button of Nav
    UIImage *buttonImage = [UIImage imageNamed:@"LobbyButton"];
    _rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [_rightButton setImage:buttonImage forState:UIControlStateNormal];
    [_rightButton addTarget:self action:@selector(testTouch) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:_rightButton];
    [self setNeedsUpdateConstraints];
}

-(void)testTouch {
    NSLog(@"You managed to figure out what you were doing wrong.");
}

-(void)updateConstraints {
    [super updateConstraints];

    [_arcShadow mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.leading.trailing.equalTo(self);
        make.height.equalTo(__navHeight);
    }];

    [_arcDrop mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(_arcShadow);
        make.height.equalTo(_arcShadow.mas_height);
    }];

    [_rightButton mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self).offset(24);
        make.trailing.equalTo(self).offset(-16);
        make.height.equalTo(@30);
    }];

}

最终,我试图创建一个自定义导航栏(但不是UIKit中的一个子类)。我试验了大约2个小时,试图找出目标 - 动作处理程序没有触发的原因,但现在我很沮丧并且没有想法。为什么我触摸 UIButton?

也许这很重要,我不知道,但在我的视图控制器上MasterChatViewController我设置了隐藏导航栏self.navigationController.navigationBarHidden = YES;

1 个答案:

答案 0 :(得分:3)

这不会解决您的问题,但只是为调试可解决的问题做一些标准的事情

1)暂时将所有按钮的背景设置为绿色(这样您就可以看到其击中区域延伸到的位置

2)对子项和superview容器(有时)设置userInteraction = YES

3)留意任何可能吞下你的触摸的手势识别器

4)确保容器视图内的按钮位于其边界内..如果不是,则不能点击

5)要进一步研究布局问题,请使用内置的Reveal或xcodes进行查看调试http://www.raywenderlich.com/98356/view-debugging-in-xcode-6