0

我有一个主要UIViewController的用户交互发生的地方。在主 ViewController 中有三个子视图。用户可以将单独的 ViewControllers 加载到 UIView 子视图中。

加载的每个子视图都处理数据输入。反过来,firstResponders被调用。我希望能够firstRespnders通过主 ViewController 关闭,也许可以使用“完成”按钮。

我在想我可以在每个单独的子视图中添加一个名称为 ex 的方法;

-(void) methodToResignResponders {}

然后,在主 ViewController 中调用此方法到当前对用户打开的视图。依次辞去在子视图中处于活动状态的响应者。

更多信息:

这就是我将每个视图设置为主 ViewController 的子视图的方式:

UIViewController *calcVC;



//set up the view to be added depending on the name of the view that was passed

if ([viewName isEqualToString:@"Tax"]) {

    calcVC= [[TAXViewController alloc]initWithNibName:@"TAXViewController" bundle:nil];

}else if ([viewName isEqualToString:@"Rent"]){

    calcVC= [[RENTViewController alloc]initWithNibName:@"RENTViewController" bundle:nil];

}else //continues with more views...



//Then add it to the subview

[firstView addSubview:calcVC.view];
4

3 回答 3

1

不确定我是否掌握了要点,主要是因为听起来您已经自己解决了。:)

但是,据我所知,您所说的 ViewController 始终是一个名为 calcVC 的 UIViewController 实例。如果您所指的始终是这个 viewController 的视图,您可以简单地调用[calcVC.view resignFirstResponder];

于 2013-02-01T17:33:23.780 回答
1

您可以制定一个基本协议,您的所有子视图控制器都实现了该协议,该协议可以完成您需要的一切(辞职第一响应者和其他任何事情)。

于 2013-02-01T18:13:57.037 回答
0

不确定这是否回答了您的问题,但您可以遍历所有子视图并在它存在时调用它,如下所示:

for (UIView *subview in [self.view subviews]) {
    if ([subview respondsToSelector:@selector(resignFirstResponder)]) {
        [subview resignFirstResponder];
    }
}
于 2013-02-01T18:27:57.213 回答