-1

以下に示す画面を含むアプリに取り組んでいます。リスト ビューを含むパネルは Nib からインスタンス化されますが、描画が含まれる薄い灰色のパネルは動的に生成された UIView であり、FrameView と呼ばれる UIView サブクラスのサブビューです (質問の目的で)。

隅にある赤い点は、その図面の削除ボタンです。描画は、リストで選択された項目と多対多の関係を持つ描画オブジェクトのコンテンツです。リスト内のアイテムを選択すると、そのアイテムの図面を示す 0 個以上のパネルが FrameView のサブビューとして追加されます。

これらの削除ボタンをクリックできるようにするために、FrameView ではユーザー操作が有効になっています。これは、リスト内の項目を選択したときに発生します。FrameView が最初に表示されたときはオフです。

左下にキーナビゲーションボタンがあります。それに関連付けられたさまざまなジェスチャとクリックがあり、ユーザーはメイン画面を使用するさまざまなエディター間を移動できます。このボタンは、メイン ビューで比較的高い zPosition を持っています。

ただし、FrameView でユーザー インタラクションが有効になると、クリックやジェスチャがナビゲーション ボタンに到達しなくなります。

FrameView の上にあるナビゲーション ボタンの zPosition を大きくすると問題が解決すると考えていましたが、そうではありません。FrameView でユーザー操作が有効になっている場合でも、ナビゲーション ボタンでタップやジェスチャを受信するにはどうすればよいですか? それとも、これについて間違った方法で行っていますか?

編集:重要な場合に備えて、ナビゲーションボタンがストーリーボードを介して追加される唯一の要素であることに言及することを意味します

ここに画像の説明を入力

EDIT 2:いじった後、hitTestをオーバーライドしているので:

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let view = super.hitTest(point, with: event)
        return view == self ? nil : view
    }

これはSOから提供されたものではなく、このアプローチを漠然と示唆する回答がいくつかありましたが、それらは(SOで一般的であるように)a)廃止されたバージョンのSwiftに関連付けられ、b)別のコンテキストに埋もれ、c)そうではありませんでした明らかな検索によって返されます。

このサイトは、時代遅れで非常に支持されている回答について何かをしなければなりません。Apple の強制アップグレード ポリシーのおかげで、古いバージョンのユーザーは実際には非常に少ないため、Swift はこれに関して最悪のケースであるに違いないと思います。

私の混乱に頭を突っ込んでくれた Ptit Xav に感謝します。

4

1 に答える 1