ios – 如何向JSQMessagesViewController添加一个搜索栏

前端之家收集整理的这篇文章主要介绍了ios – 如何向JSQMessagesViewController添加一个搜索栏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的聊天应用程序中,我使用 JSQMessagesViewController渲染对话.该应用程序还有我想要搜索的公共消息.我现在试图使用JSQMessagesViewController显示它们.为此,我想隐藏inputToolbar(可以)并添加一个搜索栏.

如何使搜索栏可见?当你看到属性topContentAdditionalInset看起来应该是可能的.这是我的代码与我的尝试:

  1. override func viewDidLoad() {
  2. super.viewDidLoad()
  3.  
  4. self.inputToolbar.removeFromSuperview()
  5.  
  6. self.searchBar.removeFromSuperview()
  7. self.topContentAdditionalInset = 44
  8. self.searchBar.frame = CGRect(x: 0,y: 25,width: 320,height: 44)
  9.  
  10. // Attempt 1
  11. // self.collectionView.addSubview(self.searchBar)
  12.  
  13. // Attempt 2
  14. // self.view.addSubview(self.searchBar)
  15.  
  16. // Attempt 3
  17. // self.navigationController?.navigationBar.addSubview(self.searchBar)
  18.  
  19. // Attempt 4
  20. // self.inputToolbar.addSubview(self.searchBar)
  21.  
  22. // Attempt 5
  23. self.collectionView.superview!.addSubview(self.searchBar)
  24. }

更新:

以下代码似乎工作正常.它的问题是:
– 它是collectionView的一个孩子,因此将滚动显示内容.将它添加到.superview不起作用.
– 当搜索栏获得焦点时,它会向下滚动44像素.

  1. var keepRef:JSQMessagesInputToolbar!
  2. var searchBar:UISearchBar!
  3. override func viewDidAppear(animated: Bool) {
  4. super.viewDidAppear(animated)
  5.  
  6. if self.inputToolbar.superview != nil {
  7. keepRef = self.inputToolbar
  8. self.inputToolbar.removeFromSuperview()
  9. }
  10.  
  11. self.topContentAdditionalInset = 44
  12. if searchBar == nil {
  13. searchBar = UISearchBar(frame: CGRect(x: 0,y: -44,height: 44))
  14. searchBar.delegate = self
  15. self.collectionView.scrollsToTop = true
  16. self.collectionView.addSubview(searchBar)
  17. }
  18. self.filterContentForSearchText("")
  19. }

更新2:

基于Sergey的答案(其工作原理),我现在使用以下代码

  1. var keepRef:JSQMessagesInputToolbar!
  2. var searchBar:UISearchBar!
  3. override func viewDidAppear(animated: Bool) {
  4. super.viewDidAppear(animated)
  5. self.inputToolbar.hidden = true
  6. self.topContentAdditionalInset = 44
  7. self.collectionView.scrollsToTop = true
  8. if searchBar == nil {
  9. searchBar = UISearchBar()
  10. searchBar.setTranslatesAutoresizingMaskIntoConstraints(false)
  11. searchBar.delegate = self
  12. self.view.addSubview(searchBar)
  13.  
  14. let views = ["searchBar" : self.searchBar];
  15. searchBar.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("[searchBar(44)]",options: NSLayoutFormatOptions(0),metrics: nil,views: views))
  16. self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|[searchBar]|",views: views))
  17. self.view.addConstraint(NSLayoutConstraint(item: searchBar,attribute: .Top,relatedBy: .Equal,toItem: self.topLayoutGuide,attribute: .Bottom,multiplier: 1.0,constant: 0.0))
  18. }
  19. self.filterContentForSearchText("")
  20. }

解决方法

首先:UIViweController的JSQMessagesViewController子类.这意味着您可以轻松添加子视图.您在Attempt 2中几乎完全正确,但设置不正确的框架.我建议你使用自动布局,如下面的代码

迅速

  1. var searchBar: UISearchBar!;
  2.  
  3. override func viewDidLoad() {
  4. super.viewDidLoad()
  5.  
  6. searchBar = UISearchBar()
  7. searchBar.setTranslatesAutoresizingMaskIntoConstraints(false)
  8. self.view.addSubview(searchBar)
  9.  
  10. let views = ["searchBar" : self.searchBar];
  11.  
  12. searchBar.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("[searchBar(44)]",views: views))
  13.  
  14. self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|[searchBar]|",views: views))
  15.  
  16. self.view.addConstraint(NSLayoutConstraint(item: searchBar,constant: 0.0))
  17. }

目标C

  1. @property (nonatomic,strong) UISearchBar *searchBar;
  2. ...
  3. // viewDidLoad
  4.  
  5. self.searchBar = [UISearchBar new];
  6. self.searchBar.translatesAutoresizingMaskIntoConstraints = NO;
  7. [self.view addSubview:self.searchBar];
  8.  
  9. NSDictionary *views = @{@"searchBar" : self.searchBar};
  10.  
  11. [self.searchBar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[searchBar(44)]"
  12. options:0
  13. metrics:nil
  14. views:views]];
  15. [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[searchBar]|"
  16. options:0
  17. metrics:nil
  18. views:views]];
  19. [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.searchBar
  20. attribute:NSLayoutAttributeTop
  21. relatedBy:NSLayoutRelationEqual
  22. toItem:self.topLayoutGuide
  23. attribute:NSLayoutAttributeBottom
  24. multiplier:1.0
  25. constant:0.0]];

猜你在找的iOS相关文章