【问题标题】:Adding Subview Covers Up Navigation Bar in Navigation Controller在导航控制器中添加子视图覆盖导航栏
【发布时间】:2014-08-07 15:20:54
【问题描述】:
我有一个导航控制器,有时我需要显示一个子视图来输入密码。问题是,当我这样做时,它会覆盖导航栏,从而无法返回层次结构。我为此使用 XIB,但它没有让我选择调整添加在其上的 UIView 的大小。
if ([student isEqualToString:@"No"]) {
[self.navigationController.view addSubview:password];
[self.navigationController.view bringSubviewToFront:password];
}
【问题讨论】:
标签:
ios
objective-c
uiview
subview
【解决方案1】:
这里有一些建议(假设我了解您的问题)。鉴于您正在提示输入密码,我假设您希望用户 a) 提供密码或 b) 取消输入密码(而不是简单地忽略它)。如果他们执行后者,则可以使用取消按钮来关闭密码子视图。
建议:
- 在子视图中添加取消按钮以关闭子视图
-
使用 UIAlertView 显示一个模式对话框,通过取消按钮捕获密码(见下文)
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Password" message:@"Enter your password:" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; // 屏蔽密码文本
-
如果您已设置当前方法,则定义类似于以下内容的子视图,使其偏离导航栏(或使用约束)
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 200, tableView.frame.size.width, 100)];
【解决方案2】:
如果您能提供所见内容的屏幕截图和您尝试构建的界面设计的图像,将会很有帮助。
上面的代码看起来有点奇怪。使用addSubview: 将这种类型的视图添加到您的navigationController 可能会产生意想不到的后果。
我会推荐:
- 在新的
UIViewController 子类中构建您的密码输入 UI,并使用 pushViewController:animated: 将此新的 viewController 添加到视图层次结构中。
或
- 通过使用系统
UIAlertView 或使用UIWindow 构建自定义警报视图,使用alertView 捕获密码条目。
如果您需要进一步解释/澄清,请告诉我。