2015-04-25 33 views
13

Trong ứng dụng trò chuyện của tôi, tôi đang sử dụng JSQMessagesViewController để hiển thị cuộc hội thoại. Ứng dụng này cũng có các thông báo công khai mà tôi muốn tìm kiếm. Tôi hiện đang cố gắng hiển thị chúng bằng cách sử dụng JSQMessagesViewController. Đối với điều này tôi muốn ẩn inputToolbar (hoạt động) và thêm một thanh tìm kiếm.Cách thêm thanh tìm kiếm vào JSQMessagesViewController

Làm cách nào để hiển thị thanh tìm kiếm? Khi bạn nhìn vào thuộc tính topContentAdditionalInset, có vẻ như nó có thể xảy ra. Đây là mã của tôi với những nỗ lực của tôi:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.inputToolbar.removeFromSuperview() 

    self.searchBar.removeFromSuperview() 
    self.topContentAdditionalInset = 44 
    self.searchBar.frame = CGRect(x: 0, y: 25, width: 320, height: 44) 

    // Attempt 1 
    // self.collectionView.addSubview(self.searchBar) 

    // Attempt 2 
    // self.view.addSubview(self.searchBar) 

    // Attempt 3 
    // self.navigationController?.navigationBar.addSubview(self.searchBar) 

    // Attempt 4 
    // self.inputToolbar.addSubview(self.searchBar) 

    // Attempt 5 
    self.collectionView.superview!.addSubview(self.searchBar) 
} 

Cập nhật:

Các mã sau đây dường như làm việc một cách hợp lý OK. Các vấn đề với nó là: - Đó là một đứa trẻ của collectionView và do đó sẽ di chuyển với nội dung ra khỏi tầm nhìn. Thêm nó vào .superview không hoạt động. - nó cuộn xuống 44 pixel khi thanh tìm kiếm được lấy nét.

var keepRef:JSQMessagesInputToolbar! 
var searchBar:UISearchBar! 
override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    if self.inputToolbar.superview != nil { 
     keepRef = self.inputToolbar 
     self.inputToolbar.removeFromSuperview() 
    } 

    self.topContentAdditionalInset = 44 
    if searchBar == nil { 
     searchBar = UISearchBar(frame: CGRect(x: 0, y: -44, width: 320, height: 44)) 
     searchBar.delegate = self 
     self.collectionView.scrollsToTop = true 
     self.collectionView.addSubview(searchBar) 
    } 
    self.filterContentForSearchText("") 
} 

Cập nhật 2:

Dựa trên câu trả lời của Sergey (mà hoạt động) Bây giờ tôi đang sử dụng đoạn mã sau:

var keepRef:JSQMessagesInputToolbar! 
var searchBar:UISearchBar! 
override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    self.inputToolbar.hidden = true 
    self.topContentAdditionalInset = 44 
    self.collectionView.scrollsToTop = true 
    if searchBar == nil { 
     searchBar = UISearchBar() 
     searchBar.setTranslatesAutoresizingMaskIntoConstraints(false) 
     searchBar.delegate = self 
     self.view.addSubview(searchBar) 

     let views = ["searchBar" : self.searchBar]; 
     searchBar.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("[searchBar(44)]", options: NSLayoutFormatOptions(0), metrics: nil, views: views)) 
     self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|[searchBar]|", options: NSLayoutFormatOptions(0), metrics: nil, views: views)) 
     self.view.addConstraint(NSLayoutConstraint(item: searchBar, attribute: .Top, relatedBy: .Equal, toItem: self.topLayoutGuide, attribute: .Bottom, multiplier: 1.0, constant: 0.0)) 
    } 
    self.filterContentForSearchText("") 
} 
+0

Các bạn đã thử thêm vào thanh tìm kiếm như tiêu đề xem bộ sưu tập của lượt xem? – BHendricks

Trả lời

10

Trước hết: JSQMessagesViewController lớp con của UIViweController. Điều này có nghĩa là bạn có thể dễ dàng thêm các bản xem trước. Bạn gần như đã thực hiện tất cả chính xác trong Attempt 2 nhưng bạn đặt khung không chính xác. Tôi đề nghị bạn sử dụng bố trí tự động cho điều này như trong đoạn mã sau:

Swift

var searchBar: UISearchBar!; 

override func viewDidLoad() { 
    super.viewDidLoad() 

    searchBar = UISearchBar() 
    searchBar.setTranslatesAutoresizingMaskIntoConstraints(false) 
    self.view.addSubview(searchBar) 

    let views = ["searchBar" : self.searchBar]; 

    searchBar.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("[searchBar(44)]", options: NSLayoutFormatOptions(0), metrics: nil, views: views)) 

    self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|[searchBar]|", options: NSLayoutFormatOptions(0), metrics: nil, views: views)) 

    self.view.addConstraint(NSLayoutConstraint(item: searchBar, attribute: .Top, relatedBy: .Equal, toItem: self.topLayoutGuide, attribute: .Bottom, multiplier: 1.0, constant: 0.0)) 
} 

Objective C

@property (nonatomic, strong) UISearchBar *searchBar; 
... 
// viewDidLoad 

self.searchBar = [UISearchBar new]; 
self.searchBar.translatesAutoresizingMaskIntoConstraints = NO; 
[self.view addSubview:self.searchBar]; 

NSDictionary *views = @{@"searchBar" : self.searchBar}; 

[self.searchBar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[searchBar(44)]" 
                     options:0 
                     metrics:nil 
                     views:views]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[searchBar]|" 
                    options:0 
                    metrics:nil 
                    views:views]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.searchBar 
                 attribute:NSLayoutAttributeTop 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:self.topLayoutGuide 
                 attribute:NSLayoutAttributeBottom 
                multiplier:1.0 
                 constant:0.0]]; 
+0

Cảm ơn, bây giờ nó hoạt động chính xác như thế nào. –

+0

Nó phá vỡ các ràng buộc. – Fengson

Các vấn đề liên quan