我有一个基于UINavigationController的应用程序。我可以在我的视图控制器的viewDidLoad方法中以编程方式设置UINavigationBar的标题:
self.navigationItem.title = m_name;
我可以制作它以便导航栏中的标题可编辑吗? IE浏览器。我希望用户能够点击导航栏中的标题,并能够对其进行编辑。
这可能吗?如果有可能,它是否可能符合Apple的人机界面指南? (这篇文章暗示它会,但不会告诉我如何实现它 - Make UINavigationBar title editable)
非常感谢
森
答案 0 :(得分:20)
您可以为标题设置自定义视图。
<强> titleview的强>
当导航栏中心显示自定义视图时 接收器是最重要的项目。
@property(非原子,保留)UIView * titleView
<强>讨论强>
如果此属性值为nil,则导航项的标题为 当接收器是时,显示在导航栏的中心 顶级项目。如果将此属性设置为自定义标题,则会显示该属性 而不是标题。如果leftBarButtonItem是,则忽略此属性 不是。
自定义视图可以包含按钮。使用buttonWithType:方法 UIButton类以自定义视图的样式添加按钮 导航栏。自定义标题视图以导航栏为中心 并且可以调整大小以适应。
如果你要在titleView中放置一个UITextField,你可以给它一个clearColor背景并将其设置为没有边框。 Wala你有一个UINavigationBar标题,你可以点击和编辑。
答案 1 :(得分:11)
Ryan的解决方案是完全正确的。如果有人在实现它时遇到问题,这里有一些示例代码可以帮到你。只需使用navigationController将其粘贴到任何类的ViewDidLoad中。
UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 200, 22)];
textField.text = @"Insert Title Here";
textField.font = [UIFont boldSystemFontOfSize:19];
textField.textColor = [UIColor whiteColor];
textField.textAlignment = NSTextAlignmentCenter;
self.navigationItem.titleView = textField;
如果你的项目不使用ARC,请确保像这样发布textField:
UITextField *textField = [[[UITextField alloc]initWithFrame:CGRectMake(0, 0, 200, 22)]autorelease];
或者像这样:
[textField release];
希望有所帮助。
答案 2 :(得分:2)
Ryan的快速解决方案
let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 22))
textField.text = "Title"
textField.font = UIFont.systemFontOfSize(19)
textField.textColor = UIColor.whiteColor()
textField.textAlignment = .Center
self.navigationItem.titleView = textField
答案 3 :(得分:0)
您可以将文本字段放在导航栏的右上方,并将其设置为隐藏/未启用。使用手势识别器检测导航栏上的点击并将文本字段设置为启用/不隐藏。然后在textfield的结束编辑方法中,再次将其设置为隐藏,并将导航栏的标题设置为文本字段的标题。
答案 4 :(得分:0)
在导航栏上添加一个隐藏的文本字段,这样点击时,它会弹出一个键盘,用户可以在其中输入文字。
获取返回按钮事件,在那里您可以使用新添加的文本更改导航栏文本。并再次隐藏文本字段。
享受编码:)
答案 5 :(得分:0)
在导航栏上放置一个文本字段,并将textField背景颜色设置为不透明度为零。
答案 6 :(得分:0)
这是Swift 4中的Ciprian's code,并针对iOS 12进行了更正:
let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
textField.text = "Your Title"
textField.font = UIFont.systemFont(ofSize: 17, weight: .semibold)
textField.textAlignment = .center
self.navigationItem.titleView = textField