带导航栏的JSQMessagesViewController

时间:2016-01-31 23:20:34

标签: swift jsqmessagesviewcontroller

我正在努力为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)

这似乎完成了工作。如果有更好的方法可以告诉我。

3 个答案:

答案 0 :(得分:1)

我花了几个小时才找到满意的解决方案。我所做的是使用Main.storyboard添加导航栏。 Adding a navigation bar to JSQMessagesViewController

在文件夹Resources中放置的文件夹JSQMessageViewController中,您会找到名为JSQMessagesViewController的.xib文件。您可以按照自己的方式自定义UI。添加导航栏。

之后,您必须在IBAction中定义JSQMessagesViewController.h - 方法。例如:

-(IBAction)back;

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

-(IBAction)back {

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

最后一步是将IBAction - 方法与故事板连接起来。

信息:当您向UI添加导航栏时,请确保最小化集合视图的大小以使气泡显示在导航栏下。

祝你好运, 纳扎尔

答案 1 :(得分:0)

您可以使用界面构建器执行此操作。您需要做的就是从屏幕右下角的对象库中添加一个导航控制器(相同的位置可以获得视图控制器按钮和标签)。 将它放在故事板上后,选择它,然后转到属性检查器,确保选中条形图可见性✅显示导航栏。

Navigation bar Visibility screen shot

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

 import JSQMessagesViewController

 class SMSConversationViewController: JSQMessagesViewController {

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

然后确保在“属性”检查器中选择了这些选项

Attributes Inspector options Screen Shot

这会将您的消息保留在导航栏下。希望这有用。

答案 2 :(得分:0)

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

同时, 最后通过在Storyboard中手动添加按钮并解除viewController来实现它。

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

}