2017-09-28 13 views
1

NavigationItemの新しいiOS 11 UISearchControllerに適合した後、いくつかの問題が発生しました。iOS 11のUIToolbarボタンからアクションが呼び出されないUISearchController

UISearchControllerの検索バーのツールバーにUIBarButtonItemを追加しました。このボタンは、クリックされたときに関数を呼び出します(UIBarButtonItemコンストラクタのaction-parameterとして渡されます)。

iOS 11より前のバージョンでは、検索バーがtableHeaderViewに添付されていましたが、これはうまく機能しています(まだ動作しています)。このボタンがクリックされると、この関数が呼び出されます。

しかし、iOS 11では実装が同じでも関数は呼び出されません。

何が間違っている可能性がありますか?または、iOS 11のバグですか?

private func setupSearchController() { 

     ... 

     let toolbar = UIToolbar() 
     toolbar.sizeToFit() 

     // Create bar button item with image. 
     let qrBarButton = UIBarButtonItem(image: #imageLiteral(resourceName: "QR Code"), style: .plain, target: nil, action: #selector(didPressQRToolbarButton)) 

     // Add the new button. 
     toolbar.items = [qrBarButton] 

     searchController.searchBar.inputAccessoryView = toolbar 

     // If the device is on iOS 11, use the "native" search bar placement. 
     if #available(iOS 11.0, *) { 
      navigationItem.searchController = searchController 

      // Don't use the large title in the navigation bar. 
      navigationController?.navigationBar.prefersLargeTitles = false 
     } else { 
      // Handled in subclasses. 
     } 
    } 

    /// Action for the QR toolbar button 
    func didPressQRToolbarButton(sender: Any) { 
     ... 
     // NOT CALLED 
    } 

答えて

1

まず、機能func didPressQRToolbarButton(sender: Any)の送信者を確認します。 それはこのようにする必要があります。自動@objc推論がスウィフト4で、だから、スウィフト4.

に廃止されましたので、次に、あなたは、Xcodeのからいくつかの警告を取得する必要があります

func didPressQRToolbarButton(sender: UIBarButtonItem) 

didPressQRTToolbarまたは#selectorへの引数として渡された任意の関数:

#selector(didPressQRToolbarButton) 

は、その上@objcを追加する必要があります宣言:

@objc func didPressQRToolbarButton(sender: Any) { 
0

問題はUIBarButtonItemコンストラクタにターゲットとして自己を通過させることによって固定しました。どういうわけか、これはiOS 11以前は必要ありませんでした。

この修正とfesteban26の答えは問題を解決しました。

+0

バーボタンアイテムを作成するときに、ターゲットとして 'nil'を渡していました。ターゲットとして 'self'を渡すだけで、コードは変更されずに動作します。 ターゲットを渡すことは、iOSのすべてのバージョンで必須です。そうしないと、ボタンはどこに誰がタップイベントを渡すのかわかりません。 – Rishi

関連する問題