带有导航栏的 JSQMessagesViewController
JSQMessagesViewController with Navigation Bar
我正在努力将导航栏添加到 JSQMessagesViewController。是否可以在界面生成器中执行此操作,或者我是否必须以编程方式创建导航栏?
尝试使用 IB 执行此操作时,导航栏在运行时不可见,并且消息一直滚动到 iPhone 显示的顶部。我认为需要添加约束才能使其起作用。我不确定如何或向什么添加约束,因为在 IB 中除了我的导航栏之外没有其他任何东西。
抱歉,如果这是一个基本问题,感谢您提供的任何指导!
更新:
我仍然很好奇这是否可以通过 IB 完成。但是,我已经想出如何以编程方式执行此操作。我将以下内容添加到 viewDidLoad()
// Create the navigation bar
let navigationBar = UINavigationBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 64)) // Offset by 20 pixels vertically to take the status bar into account
navigationBar.backgroundColor = UIColor.whiteColor()
navigationBar.delegate = self;
// Create a navigation item with a title
let navigationItem = UINavigationItem()
navigationItem.title = contacts[i].firstName
// Create left and right button for navigation item
let leftButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "btn_clicked:")
let rightButton = UIBarButtonItem(title: "Details", style: UIBarButtonItemStyle.Plain, target: self, action: "details_clicked:")
// Create two buttons for the navigation item
navigationItem.leftBarButtonItem = leftButton
navigationItem.rightBarButtonItem = rightButton
// Assign the navigation item to the navigation bar
navigationBar.items = [navigationItem]
// Make the navigation bar a subview of the current view controller
self.view.addSubview(navigationBar)
这似乎完成了工作。让我知道是否有更好的方法来解决这个问题。
您可以使用界面生成器来完成此操作。您需要做的就是从屏幕右下角的对象库中添加一个导航控制器(与视图控制器按钮和标签相同的地方)。
一旦你把它放在你的故事板上 select 然后去属性检查器并确保 Bar Visibility ✅ Shows Navigation Bar 被选中。
然后你应该创建一个视图控制器,它是 JSQMessagesViewController 的子类,我的文件的开头在 swift
中看起来像这样
import JSQMessagesViewController
class SMSConversationViewController: JSQMessagesViewController {
这使得此视图可以拥有 JSQMessagesViewController 的所有属性,但我可以自定义它以适合我的应用程序。
然后确保在属性检查器select中编辑了这些选项
这将使您的消息保持在您的导航范围内。希望这对您有所帮助。
我很难在 UIStoryboard 中使用 navigationController(自动)获得后退按钮。我的意思是您转到嵌入在 UINavigationController 中的 JSQMessagesViewController class,BackButton 将出现在顶部的 NavigationBar 中。我仍然不确定如何以这种方式做到这一点,我们将不胜感激。
与此同时,
最后通过在 Storyboard 中手动添加按钮并关闭 viewController.
使其工作
@IBAction func navBackButton(sender: UIBarButtonItem) {
dismissViewControllerAnimated(true, completion: nil)
}
我花了几个小时才找到令人满意的解决方案。我所做的是使用 Main.storyboard 添加一个导航栏。
Adding a navigation bar to JSQMessagesViewController
在位于文件夹 JSQMessageViewController
中的文件夹 Resources
中,您将找到一个名为 JSQMessagesViewController
的 .xib 文件。您可以按照自己的方式自定义 UI。给它添加一个导航栏。
之后你必须在 JSQMessagesViewController.h
中定义一个 IBAction
方法。例如:
-(IBAction)back;
使用JSQMessagesViewController.m
文件填充方法体:
-(IBAction)back {
[self dismissViewControllerAnimated:YES completion:^{
}]; }
最后一步是将 IBAction
方法与情节提要连接起来。
信息:当您将导航栏添加到 UI 时,请确保将 collectionview 的大小最小化以使气泡显示在导航栏下方。
此致,
纳扎尔
我正在努力将导航栏添加到 JSQMessagesViewController。是否可以在界面生成器中执行此操作,或者我是否必须以编程方式创建导航栏?
尝试使用 IB 执行此操作时,导航栏在运行时不可见,并且消息一直滚动到 iPhone 显示的顶部。我认为需要添加约束才能使其起作用。我不确定如何或向什么添加约束,因为在 IB 中除了我的导航栏之外没有其他任何东西。
抱歉,如果这是一个基本问题,感谢您提供的任何指导!
更新: 我仍然很好奇这是否可以通过 IB 完成。但是,我已经想出如何以编程方式执行此操作。我将以下内容添加到 viewDidLoad()
// Create the navigation bar
let navigationBar = UINavigationBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 64)) // Offset by 20 pixels vertically to take the status bar into account
navigationBar.backgroundColor = UIColor.whiteColor()
navigationBar.delegate = self;
// Create a navigation item with a title
let navigationItem = UINavigationItem()
navigationItem.title = contacts[i].firstName
// Create left and right button for navigation item
let leftButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "btn_clicked:")
let rightButton = UIBarButtonItem(title: "Details", style: UIBarButtonItemStyle.Plain, target: self, action: "details_clicked:")
// Create two buttons for the navigation item
navigationItem.leftBarButtonItem = leftButton
navigationItem.rightBarButtonItem = rightButton
// Assign the navigation item to the navigation bar
navigationBar.items = [navigationItem]
// Make the navigation bar a subview of the current view controller
self.view.addSubview(navigationBar)
这似乎完成了工作。让我知道是否有更好的方法来解决这个问题。
您可以使用界面生成器来完成此操作。您需要做的就是从屏幕右下角的对象库中添加一个导航控制器(与视图控制器按钮和标签相同的地方)。 一旦你把它放在你的故事板上 select 然后去属性检查器并确保 Bar Visibility ✅ Shows Navigation Bar 被选中。
然后你应该创建一个视图控制器,它是 JSQMessagesViewController 的子类,我的文件的开头在 swift
中看起来像这样 import JSQMessagesViewController
class SMSConversationViewController: JSQMessagesViewController {
这使得此视图可以拥有 JSQMessagesViewController 的所有属性,但我可以自定义它以适合我的应用程序。
然后确保在属性检查器select中编辑了这些选项
这将使您的消息保持在您的导航范围内。希望这对您有所帮助。
我很难在 UIStoryboard 中使用 navigationController(自动)获得后退按钮。我的意思是您转到嵌入在 UINavigationController 中的 JSQMessagesViewController class,BackButton 将出现在顶部的 NavigationBar 中。我仍然不确定如何以这种方式做到这一点,我们将不胜感激。
与此同时, 最后通过在 Storyboard 中手动添加按钮并关闭 viewController.
使其工作@IBAction func navBackButton(sender: UIBarButtonItem) {
dismissViewControllerAnimated(true, completion: nil)
}
我花了几个小时才找到令人满意的解决方案。我所做的是使用 Main.storyboard 添加一个导航栏。 Adding a navigation bar to JSQMessagesViewController
在位于文件夹 JSQMessageViewController
中的文件夹 Resources
中,您将找到一个名为 JSQMessagesViewController
的 .xib 文件。您可以按照自己的方式自定义 UI。给它添加一个导航栏。
之后你必须在 JSQMessagesViewController.h
中定义一个 IBAction
方法。例如:
-(IBAction)back;
使用JSQMessagesViewController.m
文件填充方法体:
-(IBAction)back {
[self dismissViewControllerAnimated:YES completion:^{
}]; }
最后一步是将 IBAction
方法与情节提要连接起来。
信息:当您将导航栏添加到 UI 时,请确保将 collectionview 的大小最小化以使气泡显示在导航栏下方。
此致, 纳扎尔