2

我正在努力将导航栏添加到 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)

这似乎完成了工作。让我知道是否有更好的方法来解决这个问题。

4

3 回答 3

1

我花了几个小时找到一个令人满意的解决方案。我所做的是使用 Main.storyboard 添加导航栏。 向 JSQMessagesViewController 添加导航栏

在文件夹Resources中的文件夹中,JSQMessageViewController您将找到一个名为 .xib 的文件JSQMessagesViewController。您可以按照自己想要的方式自定义 UI。为其添加导航栏。

之后,您必须IBActionJSQMessagesViewController.h. 例如:

-(IBAction)back;

使用JSQMessagesViewController.m文件填充方法体:

-(IBAction)back {

[self dismissViewControllerAnimated:YES completion:^{
}]; }

最后一步是将IBAction- 方法与情节提要连接起来。

信息:当您向 UI 添加导航栏时,请确保最小化 collectionview 的大小以使气泡出现在导航栏下方。

最好的问候, 纳扎尔

于 2016-12-18T14:09:36.003 回答
0

我很难在 UIStoryboard 中使用 navigationController 获得后退按钮(自动)。我的意思是你继续使用嵌入在 UINavigationController 中的 JSQMessagesViewController 类,并且 BackButton 将出现在顶部的 NavigationBar 中。我仍然不确定如何做到这一点,任何帮助表示赞赏。

同时,最终通过在 Storyboard 中手动添加按钮并关闭 viewController 来使其工作。

@IBAction func navBackButton(sender: UIBarButtonItem) {
    dismissViewControllerAnimated(true, completion: nil)

}
于 2016-02-25T20:56:38.840 回答
0

您可以使用界面生成器执行此操作。您需要做的就是从屏幕右下角的对象库中添加一个导航控制器(与视图控制器按钮和标签相同的位置)。一旦你把它放在你的故事板上选择它,然后去属性检查器并确保 Bar Visibility ✅ Shows Navigation Bar 被选中。

导航栏可见性屏幕截图

然后你应该创建一个视图控制器,它是 JSQMessagesViewController 的子类,我的文件的开头在 swift 中看起来像这样

 import JSQMessagesViewController

 class SMSConversationViewController: JSQMessagesViewController {

这使得该视图可以具有 JSQMessagesViewController 的所有属性,但我可以自定义它以适合我的应用程序。

然后只需确保在 Attributes Inspector 中选择了这些选项

属性检查器选项屏幕截图

这将使您的消息保持在您的导航之下。希望这会有所帮助。

于 2016-02-08T04:01:52.643 回答