2015-04-28 19 views
24

Tôi cố gắng làm cho thanh tìm kiếm của mình nhanh chóng, nhưng tôi gặp vấn đề khi loại bỏ bàn phím trên màn hình khi tôi nhấn ra khỏi thanh tìm kiếm. Khi tôi thử với textfield nó hoạt động hoàn toàn tốt với mã này.Làm thế nào để loại bỏ bàn phím khi tôi nhấn ra khỏi thanh tìm kiếm trên Swift?

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
     self.view.endEditing(true) 
    } 

Nó hoạt động khi tôi nhấn ngoài trường văn bản và sau đó tắt bàn phím. Tôi muốn làm như vậy với thanh tìm kiếm của tôi, bởi vì khi tôi sử dụng thanh tìm kiếm và sử dụng cùng một cách như textfield, nó không hoạt động chút nào. Bất kỳ tài liệu tham khảo hoặc mã là rất hữu ích cho tôi.

+0

Bạn có thể tìm câu trả lời trong các liên kết dưới đây: http://stackoverflow.com/questions/24908966/hide-keyboard-for-text-field-in-swift-programming-language –

+0

tôi đã cố gắng mà nên tôi nhận được mã của tôi cho textfield và nó hoạt động hoàn toàn tốt như những gì tôi nói, nhưng tôi có một số vấn đề khi tôi phải sử dụng thanh tìm kiếm, bởi vì tôi không thể làm cho bàn phím của tôi bị sa thải khi tôi chạm vào một khu vực khác ngoài thanh tìm kiếm của tôi – aji

Trả lời

36

thử điều này:

self.mySearchController.searchBar.endEditing(true) 

thay mySearchController với tên điều khiển tạo của bạn .. Nếu bạn không tạo ra nó bằng chương trình nhưng thay vào đó bạn chỉ kéo một thanh tìm kiếm từ thư viện sau đó IBOutlet bạn có thể tìm kiếm đến lớp và tài liệu tham khảo của bạn nó như:

self.mySearchBar.endEditing(true) 
+0

bất kỳ đầu mối nào để có được sự kiện khi nhấp vào bên ngoài thanh tìm kiếm của tôi, bởi vì khi tôi sử dụng textfield, tôi sử dụng chức năng như những gì tôi viết trước đó và nó hoạt động tự động để nhận sự kiện khi tôi nhấp vào bên ngoài trường văn bản của mình. Bạn có thể giúp tôi có chức năng như vậy trong thanh tìm kiếm – aji

+0

bạn đã kéo nó từ thư viện vào bảng phân cảnh của mình hay tạo nó từ bên trong một lớp ..? –

+0

tôi đã kéo nó từ bảng phân cảnh của mình – aji

4
func searchBarSearchButtonClicked(searchBar: UISearchBar) { 

     searchActive = false; 
     searchProject.resignFirstResponder() 
    } 

phương pháp này sẽ được gọi khi nút người dùng nhấp chuột tìm kiếm trên keyboard.So đây chúng ta có thể bỏ k eyboard.I nghĩ rằng đây là phương pháp đúng.

10

Đã kiểm tra và làm việc!

func searchBarSearchButtonClicked(searchBar: UISearchBar) 
{ 
    searchActive = false; 
    self.mySearchBar.endEditing(true) 
} 
0

chúng ta có thể làm điều này với phương pháp sau đây

func searchBarTextDidBeginEditing(searchBar: UISearchBar) { 
     searchBar.showsCancelButton = true; 
    } 

    func searchBarTextDidEndEditing(searchBar: UISearchBar) { 
     searchBar.showsCancelButton = false; 
    } 
1

Thứ nhất, UISearchBarDelegate của Apple là giải pháp đúng để ẩn bàn phím khi người dùng nhấp vào nút tìm kiếm trong khi dụ UISearchBar 's là first responder (tìm hiểu UIResponder). Tóm lại, searchBarSearchButtonClicked(_:) là những gì bạn cần cho công việc này.

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 
    searchBar.resignFirstResponder() // hides the keyboard. 
    doThingsForSearching() 
} 

Nếu nó không hoạt động, kiểm tra, không điều khiển của bạn phù hợp với UISearchBarDelegate và thứ hai, không UISearchBarDelegate biết về thực hiện lớp học của bạn (nếu bạn không hoàn toàn hiểu những gì tôi nói về, bạn nên tìm hiểu delegation pattern bắt đầu đọc here):

class YourAwesomeViewController: UIViewController, UISearchBarDelegate { // pay attention here 

    @IBOutlet weak var yourSearchBar: UISearchBar! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.yourSearchBar.delegate = self // and it's important too 
    } 
} 

Hơn nữa, nếu bạn cần để ẩn bàn phím chạm vào bên ngoài của search bar mà không cần chạm vào nút tìm kiếm (người dùng có thể chang e tâm trí của mình để tìm kiếm một cái gì đó), UITapGestureRecognizer là một cách đơn giản để đối phó với điều đó.

  1. Ctrl-drag a Tap Gesture Recognizer từ Object Library vào Trình điều khiển chế độ xem của bạn.

enter image description here

  1. Ctrl-drag gần đây thêm Tap Gesture Recognizer từ document outline trong kịch bản để thực hiện lớp học của bạn như IBAction.

enter image description here

  1. Cuối cùng, hãy viết một mã số:

@IBAction func tapToHideKeyboard(_ sender: UITapGestureRecognizer) { self.yourSearchBar.resignFirstResponder() }

Ngoài ra, đừng quên tạo@IBOutlet cho thanh tìm kiếm để có quyền truy cập bên trong việc triển khai lớp học của bạn.

Cả hai biến thể trên đều hoạt động tốt trong dự án của tôi.

0
class MaCaveViewController: UIViewController, UISearchBarDelegate { 

    @IBOutlet weak var SearchBar: UISearchBar! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     SearchBar.delegate = self 
    } 

    // When button "Search" pressed 
    func searchBarSearchButtonClicked(_ searchBar: UISearchBar){ 
     print("end searching --> Close Keyboard") 
     self.SearchBar.endEditing(true) 
    } 
} 

Điều này làm việc rất tốt cho tôi.

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