当 UIView 的子视图不起作用时,在 UI Button 上点击方法

Posted

技术标签:

【中文标题】当 UIView 的子视图不起作用时,在 UI Button 上点击方法【英文标题】:Tap method on UIButton when its a sub view of UIView not working 【发布时间】:2015-08-19 21:33:29 【问题描述】:

点击 UIButton 时出现 EXC_BAD_ACCESS 错误。如果我将逻辑移动到RootViewController.m 它可以工作,但在我的PanelViewController.m 中实现时则不行。我不明白为什么这不起作用,我缺少什么以及如何使它起作用?

RootViewController.m

#import "RootViewController.h"
#import "PanelViewController.h"

@interface ListViewRootController ()

@end

@implementation ListViewRootController
    - (void)viewDidLoad 
        [super viewDidLoad];

        [self.view setFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)];
        [self.view setBackgroundColor:[UIColor blueColor]];

        PanelViewController *panelView = [[PanelViewController alloc] init];

        [self.view addSubview:panelView.view];
    
@end

PanelViewController.m

#import "PanelViewController.h"

@interface PanelViewController ()

@end

@implementation PanelViewController
    - (void)viewDidLoad 
        [super viewDidLoad];

        UIView *topBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 60)];
        topBar.backgroundColor = [UIColor whiteColor];

        UIButton *mapButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, topBar.frame.size.height)];
        [mapButton setTitle:@"Map" forState:UIControlStateNormal];
        [mapButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [mapButton addTarget:self action:@selector(mapViewToggle:) forControlEvents:UIControlEventTouchDown];

        [self.view addSubview:topBar];
        [topBar addSubview:mapButton];
    

    - (void)mapViewToggle:(UIButton *)sender
         NSLog(@"hello, is it me youre looking for");
    
@end

【问题讨论】:

【参考方案1】:

是的,不行,panelView控制器在这之后被释放

PanelViewController *panelView = [[PanelViewController alloc] init];

你应该在 RootViewController 的 .h 中有一个 var,类似于

@interface RootViewController : UIViewController 
  PanelViewController *panelView;

然后:

     panelView = [[PanelViewController alloc] init];

     [self.view addSubview:panelView.view];

【讨论】:

谢谢!这是完全有道理的。我现在已经修复它并且它现在按预期工作:)

以上是关于当 UIView 的子视图不起作用时,在 UI Button 上点击方法的主要内容,如果未能解决你的问题,请参考以下文章

通过动画调整 UIView 大小时约束不起作用

使用固定大小的子视图和自动布局调整 UIView 的大小不起作用

LPLinkView backgroundColor 在 iOS 中不起作用

iOS - 界面生成器 - 不继承父视图 alpha 的子视图

UIButton 作为 MKAnnotationView 的子视图不起作用

UIView addSubview 自动布局不起作用