13

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

self.navigationItem.title = m_name;

我可以使导航栏中的标题可编辑吗?IE。我希望用户能够点击导航栏中的标题,并能够对其进行编辑。

这可能吗?如果可能的话,它是否可能符合 Apple 的人机界面指南?(这篇文章暗示它会,但没有告诉我如何实现它 -使 UINavigationBar 标题可编辑

非常感谢

弥敦道

4

7 回答 7

20

您可以为标题设置自定义视图。

标题视图

当接收者是顶部项目时,显示在导航栏中心的自定义视图。

@property(nonatomic, 保留) UIView *titleView

讨论

如果此属性值为 nil,则当接收者为顶部项时,导航项的标题显示在导航栏的中心。如果将此属性设置为自定义标题,则会显示它而不是标题。如果 leftBarButtonItem 不为零,则忽略此属性。

自定义视图可以包含按钮。使用 UIButton 类中的 buttonWithType: 方法以导航栏的样式将按钮添加到自定义视图。自定义标题视图以导航栏为中心,可以调整大小以适应。

如果你要在你的 titleView 中放置一个 UITextField,你可以给它一个 clearColor 背景并将它设置为没有边框。哇,你有一个 UINavigationBar 标题,你可以点击和编辑。

于 2012-05-20T13:54:47.450 回答
13

Ryan 的解决方案是完全正确的。如果有人在实现它时遇到困难,这里有一些示例代码应该可以帮助您。只需将其粘贴到任何具有导航控制器的类的 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];

希望有帮助。

于 2012-12-24T19:29:13.223 回答
2

Ryan 的 swift 解决方案

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
于 2015-05-21T11:18:03.170 回答
1

这是Ciprian在 Swift 4 中的代码,并针对 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
于 2019-02-03T12:18:41.170 回答
0

您可以在导航栏顶部放置一个文本字段,并将其设置为隐藏/未启用。使用手势识别器检测导航栏上的点击并将文本字段设置为启用/未隐藏。然后在文本域的做结束编辑方法中,再次将其设置为隐藏并将导航栏的标题设置为文本域的标题。

于 2012-05-20T13:53:12.940 回答
0

在导航栏上添加一个隐藏的文本字段,所以点击它会弹出一个键盘,用户可以在其中输入文本。

获取返回按钮事件,在那里您可以使用新添加的文本更改导航栏文本。并再次隐藏文本字段。

享受编码:)

于 2012-05-20T13:53:36.247 回答
0

在 NavigationBar 上放置一个 textField 并将不透明度的 textField 背景颜色设置为零。

于 2012-05-20T14:03:48.600 回答