Ios 添加子视图会覆盖导航控制器中的导航栏

Ios 添加子视图会覆盖导航控制器中的导航栏,ios,objective-c,uiview,subview,Ios,Objective C,Uiview,Subview,我有一个导航控制器,有时我需要提供一个子视图来输入密码。问题是,当我这样做时,它会覆盖导航栏,使返回层次结构变得不可能。我使用XIB来实现这一点,但它没有给我调整添加到它上的UIView大小的选项 if ([student isEqualToString:@"No"]) { [self.navigationController.view addSubview:password]; [self.navigationController.view bringSubviewToFron

我有一个导航控制器,有时我需要提供一个子视图来输入密码。问题是,当我这样做时,它会覆盖导航栏,使返回层次结构变得不可能。我使用XIB来实现这一点,但它没有给我调整添加到它上的UIView大小的选项

if ([student isEqualToString:@"No"]) {
    [self.navigationController.view addSubview:password];
    [self.navigationController.view bringSubviewToFront:password];
}

如果你能提供你所看到的屏幕截图和你试图构建的界面设计的图像,那会很有帮助

上面的代码看起来有点奇怪。使用
addSubview:
将此类型的视图添加到navigationController可能会产生意外后果

我建议:

  • 在新的
    UIViewController
    子类中构建密码输入UI,并使用
    pushViewController:animated:
    将此新的viewController添加到视图层次结构中

  • 通过使用系统
    UIAlertView
    或使用
    UIWindow
    构建自定义alertView,使用alertView捕获密码条目
    如果您需要进一步解释/澄清,请告诉我

    这里有一些建议(假设我理解你的问题)。如果您提示输入密码,我假设您希望用户a)提供密码或b)取消输入密码(而不是简单地忽略它)。如果是后者,则可以使用“取消”按钮取消密码子视图

    建议:

  • 将“取消”按钮添加到子视图以取消该子视图
  • 使用UIAlertView显示一个模式对话框,用“取消”按钮捕获密码(见下文)

    UIAlertView*alertView=[[UIAlertView alloc]initWithTitle:@“密码”消息:@“输入密码:”代理:自取消按钮:@“取消”其他按钮:@“确定”,无]; alertView.alertViewStyle=UIAlertViewStyleLogin和PasswordInput;//屏蔽pwd文本

  • 如果设置为当前进近,则定义类似于以下内容的子视图,使其与导航栏偏移(或使用约束)

    UIView*view=[[UIView alloc]initWithFrame:CGRectMake(0,200,tableView.frame.size.width,100)]