UINavigationBar可编辑的标题?

时间:2012-05-20 13:48:11

标签: objective-c ios uinavigationbar

我有一个基于UINavigationController的应用程序。我可以在我的视图控制器的viewDidLoad方法中以编程方式设置UINavigationBar的标题:

self.navigationItem.title = m_name;

我可以制作它以便导航栏中的标题可编辑吗? IE浏览器。我希望用户能够点击导航栏中的标题,并能够对其进行编辑。

这可能吗?如果有可能,它是否可能符合Apple的人机界面指南? (这篇文章暗示它会,但不会告诉我如何实现它 - Make UINavigationBar title editable

非常感谢

7 个答案:

答案 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