为什么按钮在视图中与父视图的控制器不活动?

时间:2017-12-05 08:45:05

标签: ios objective-c viewcontroller

我正在使用swipView制作页面滚动应用

根据其SwipeViewDataSource协议,我制作了一个方法

 - (UIView *)swipeView:(SwipeView *)swipeView viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view
{

        ContentViewController *contentVC = [[ContentViewController alloc]init];
        view = contentVC.view;
        return view;
}

提供翻转内容

并且ContentViewController很简单:

它只有这两种自定义方法:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(50, 50, 100, 200)];
    [btn setTitle:@"click me" forState:UIControlStateNormal];
    [btn setBackgroundColor:[UIColor redColor]];
    [btn addTarget:self action:@selector(onClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];

}
-(void) onClick:(id) sender {
    NSLog(@"click detected in contentView controller");
}

只在viewDidLoad中添加了一个按钮,并点击了监听方法

运行应用时,按钮显示,但点击不会触发OnClick:方法。

在搞清楚之后,我注意到如果我把这个方法

-(void) onClick:(id)sender {
    NSLog(@"on click detected  main view controller");
}

到实现SwipeViewDataSource的视图,即在“父”中,将打印ContentViewController那条调试信息行。

对我来说这很奇怪。我的意思是为什么会这样?

1 个答案:

答案 0 :(得分:0)

您的contentviewcontroller将在viewForItemAtIndex委托方法中返回其视图后发布,因为您仅保留其视图。但是你已经将按钮目标添加到已经发布的self(contentviewcontroller)。