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