2017-08-28 11 views
7

Xcode9 Beta6を使用してプロジェクトをビルドしましたが、アクションはiOS10デバイスで正しく呼び出されましたが、iOS11デバイスでは機能しません。iOS11 UIBarButtonItemアクションが呼び出されない

私のプロジェクトでは、いくつかのviewControllerの上にUIToolBarがあり、toolBarにはいくつかのUIBarButtonItemが含まれています。

この種類のviewControllerがあります。このビューコントロールのUIBarButtonItemアクションは、UIBarButtonItemをタップすると呼び出されません。

viewDidLoadの最後には、toolbar.itemsという情報が表示され、ターゲットアクションが正しく設定されていることが示されます。

Debug Output

+2

カン・チェン、問題を解決しましたか? – Cata

+1

ViewControllerにジェスチャー認識機能がありますか?それは私の場合に問題を引き起こした。私はまだこれをどう扱うべきか分からない。 –

+2

@AlexBlackはい、持っています。私はviewControllerの 'view'にTapGestureRecognizerを追加し、UIToolbarはviewControllerの' view'のサブビューです。ツールバーとそのbarItemは 'view'の一番上にあるので、tapイベントはまずbarItemによって捕捉されるべきです。私はすでにAppleにこれを実証するためのサンプルプロジェクトを作成しました。彼らは私に応答を与えることができることを願って、私はここに投稿することができます。 –

答えて

3

私は私の見解から、現在のジェスチャー認識を削除し、新しいものを追加することで、この問題を解決しました。私は私のビューの接続インスペクタを開いて、ジェスチャ認識ツールにジェスチャー認識接続を追加しました。

1

アップルがこのバグを確認しました。 一時的な解決策は、オーバーラップ領域を削除してジェスチャ認識ツールの領域を変更しているため、タップジェスチャはUIBarButtonItemのタップイベントをブロックしません。

-2

をターゲットとする方法には、@objcを付けてください。

+0

この問題はSwift langに固有の問題ではありません。実際にiOS 11のObj-CかSwiftかどうか。 –

+0

@iOSCuriosity OPのdescに基づいて、私はこの種の問題に対する答えを提供しました(あなたが自分で管理している場合は、新しいSwiftを持つXcode 9でセレクタなどに '@ objc 'をマークする必要があるからです)。それはOPだけを助ける必要はありません。 –

0

これは、iOS 11およびカスタムUIViewrightBarButtonItem(または左側も)に使用されている場合にのみ発生しています。 UIBarButtonItemを使用している場合、正常に動作します。 このカスタムバーアイテムの幅は0ですので、何かに設定する必要があります。このコントローラのviewDidLoad

あなたはあなたのために働くものを何かに100を置き換えることができ、コードを追加することができます。

if let view = self.navigationItem.rightBarButtonItem?.customView { 
    view.widthAnchor.constraint(equalToConstant: 100).isActive = true 
} 

は、少なくとも簡単な一時的な解決策として、それは大丈夫です。このように、私はによって解決さ、ジェスチャー認識はUIBarButtonItemにタップを無効にすること

UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeKeyboard)]; 
[self.view addGestureRecognizer:gesture]; 

0

は私の場合には問題は、このような(キーボードを閉じるために)全体のメインビューにgestureRecognizerを加えナビゲーションバーのすぐ下に配置された新しいサブビューを作成し、メインビュー全体ではなくそのビューにジェスチャ認識ツールを割り当てます。

関連する問題