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

时间:2014-08-07 15:20:54

标签: ios objective-c uiview subview

我有一个导航控制器,有时我需要提供一个子视图来输入密码。问题在于,当我这样做时,它会掩盖导航栏,使得无法在层次结构中返回。我使用XIB,但它没有让我选择调整添加它的UIView。

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

2 个答案:

答案 0 :(得分:0)

如果您可以提供您正在查看的内容的屏幕截图以及您尝试构建的界面设计的图片,那么它会很有帮助。

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

我会建议:

  1. 在新的UIViewController子类中构建密码输入UI,并使用pushViewController:animated:将此新viewController添加到视图层次结构中。
    1. 使用alertView捕获密码条目,方法是使用系统UIAlertView或使用UIWindow构建自定义alertView。
    2. 如果您需要进一步解释/澄清,请与我们联系。

答案 1 :(得分:0)

以下是一些建议(假设我了解您的问题)。鉴于您提示输入密码,我假设您希望用户a)提供密码或b)取消输入密码(不要简单地忽略它)。如果他们执行后者,则可以使用取消按钮来关闭密码子视图。

建议:

  1. 在子视图中添加取消按钮以关闭子视图
  2. 使用UIAlertView显示模式对话框以使用取消按钮捕获密码(见下文)

    UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"密码"消息:@"输入您的密码:" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@" Ok",nil]; alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; //掩盖pwd文本

  3. 如果您已根据当前方法进行设置,请定义类似于以下内容的子视图,以使其偏离导航栏(或使用约束)

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