問題タブ [responder-chain]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - mouseDragged: 2 つのサブビューに渡されませんか?
スーパービューでマウスでドラッグできるさまざまなコンテンツを持つ、サブクラス化された多数の NSView (フレーム) を持つプログラムを作成しています。すべてのビューには contentView と呼ばれる 1 つのサブビューが含まれ、さらに複雑な階層を含むことができます。
contentView として編集不可の NSTextField がある場合、mouseDown: および mouseDragged: イベントは問題なくスーパービューに渡され、ドラッグは正常に機能します。
contentView が多数の NSTextField を含む NSView のサブクラスである場合、mouseDragged: イベントは NSTextField からスーパービューに渡されません。
フレームが mouseDown: イベントを受け取ります。NSTextFields の間のギャップをクリックして、contentView を直接ドラッグするとうまくいきます。
NSTextFields は、contentView で次のように設定されます。
サブクラス化された NSTextField とサブクラス化された NSView の両方に mouseDragged: メソッドを追加しようとしましたが、メソッドを除外しました。どちらも違いはありませんでした。この問題は、同じサブビュー レベルにある他の NSControls にも存在します。
また
現時点では、この動作はまったく直感的ではないように思えます。足りないものはありますか?(私は Mountain Lion で Xcode 4.6.2 を使用しています。)
ios - UIControl ターゲット アクション イベントがレスポンダー チェーンを流れない
サブクラスが所有するテーブルに保持されているUIButton
内部に aがあります。イベントを処理できるレスポンダーが見つかるまでイベントを次のレスポンダーにバブルアップできるターゲット/アクションペアの機能を利用しようとしていますが、これが機能しません。いくつかのコード:UITableViewCell
UITableViewController
私の表のセルでは、ボタンを次のように設定します。
ボタンがセルに追加され、セルがテーブルビューに正常に表示されます。ターゲットに渡したので、このイベントはView Controllerを実装nil
するまでバブルアップするはずですが、呼び出されません。-doThing
セル サブクラスとビュー コントローラー サブクラスの両方でオーバーライド- (BOOL)canBecomeFirstResponder
して戻りYES
ましたが、組み合わせても機能しません。
ボタンとView Controllerの両方が同じレスポンダーチェーンにあることを確認するためにデバッグしましたが、どういうわけか、イベントはそれを補っていないようです.
何か案は?
ios - UITableViewCell がレスポンダー チェーンでスキップされました
のサブビューでイベントをトリガーしUITableViewCell
て、レスポンダー チェーンをバブルアップさせ、カスタムUITableViewCell
サブクラスで処理させようとしています。
基本的:
SomeView.m (のサブビューUITableViewCell
)
SomeCustomCell.m
なぜこれが機能しないのかをテストするためsomeAction:
に、ViewController にメソッドを追加しました。ViewController は、Cell が処理する必要があるにもかかわらず、テーブル ビュー セル サブビューから発生するイベントを最終的に処理するものです。セルがレスポンダー チェーン上にあることを確認し、セルの上下両方のレスポンダー チェーンのすべてのビューが、someAction:
メソッドを実装する場合にイベントに応答することを確認しました。
ここで一体何が起こっているのですか?
これはそれを示すプロジェクトですhttps://github.com/keithnorm/ResponderChainTestこれはどういうわけか予想される動作ですか? UITableViewCell が他の UIResponder とは異なる方法で処理されていることを示すドキュメントは見つかりませんでした。
delegates - レスポンダーチェーンにデリゲートを追加すると、スクロールが機能しなくなります
さまざまな理由から、NSOutlineViewDelegate プロトコルを実装するクラスをレスポンダー チェーンに追加しました。
これにより、アウトライン ビューのスクロールが停止します。コールアウト - スクロールは正常に機能し、元に戻す - スクロールが停止します。上矢印と下矢印を使用してビュー内で選択を移動すると、スクロールして選択した行が表示されますが、ジェスチャースクロールは何もしません。
デリゲートには、ドラッグ アンド ドロップをサポートするためのかなりの数のメソッドと、コンテキスト メニューをサポートするための ibaction メソッドが含まれていますが、スクロールを妨げるものがそこにあるとは考えられません (ジェスチャー スクロールで macbook air を使用しています)。何が干渉を引き起こしているのか、誰にも何か考えがありますか? または診断する方法はありますか?
デリゲート クラスを NSResponder のサブクラスにしたことを付け加えておきます。
cocoa - Cocoa: アクション (コピー:、貼り付け: など) をレスポンダー チェーンまで転送する
、などNSOutlineView
を実装するサブクラスがあります。また、サブクラスはこれらの同じメソッドを実装します。copy:
paste:
cut:
NSDocument
アウトライン ビューがレスポンダー チェーン (ファースト レスポンダーまたはその親ビュー) にある場合、すべてのコピー/貼り付けイベントはNSOutlineView
サブクラスによってインターセプトされます。私が望むのは、コンテキストに応じて、これらのメッセージの一部をキャッチするか、それらを伝播させてNSDocument
サブクラスにキャッチさせることです。
私が欲しいのは基本的に次のとおりです。
私はすでに多くのトリックを試しましたが、どれも成功しませんでした:
[[self nextResponder] copy:sender]
次のレスポンダーが実装しない可能性があるため、機能しませんcopy:
[super copy:sender]
ここでも同じ、スーパーは実装されていませんcopy:
[NSApp sendAction:anAction to:nil from:sender]
これは、最初の応答者にアクションを送信するのに適しています。アクション内で使用する場合
copy:
確かに、応答するもの、または現在のドキュメントを直接呼び出すものが見つかるまで、レスポンダー チェーンを手動でループすることもできますがcopy:
、それを行う正しい方法を探しています。
よろしくお願いします!
ios - UIPopoverController から Segue をアンワインドする
送信してからUIViewController
ロードしたことがわかりました(アプリのメインのストーリーボードではありません)。UIStoryboard
initialViewController
そのストーリーボードで使用されているアンワインド セグエがあります。その出口点は、メインのUIViewController
シーンに存在する のアンワインド アクションにあります。 UIStoryboard
このView Controllerをセグエではなくコードで表示します。
ロードされたビュー コントローラーを で提示するとpresentViewController:animated:completion:
、アンワインド セグエが正常に機能し、適切なハンドラーが見つかります。
ただし、表示されたビュー コントローラーを でラップしてからポップオーバーを表示すると、アンワインド セグエが機能しません。UIPopoverController
アンワインド アクションをブレークポイントできますが、呼び出されません。
アンワインド セグエがどのように機能するかに関するテクニカル ノートで、Apple は宛先ビュー コントローラーを検索するプロセスについて説明しています。
アンワインド セグエが宛先ビュー コントローラーを決定する方法 アンワインド セグエが開始されると、アンワインド セグエの作成時に指定されたアンワインド アクションを実装するナビゲーション階層で最も近いビュー コントローラーを最初に見つける必要があります。このビュー コントローラーは、アンワインド セグエの宛先になります。適切なビュー コントローラーが見つからない場合、アンワインド セグエは中止されます。
アンワインド セグエを開始したビュー コントローラーから始まる検索順序は次のとおりです。
レスポンダ チェーンの次のビュー コントローラに
viewControllerForUnwindSegueAction:fromViewController:withSender:
メッセージが送信されます。モーダルに表示されるビュー コントローラの場合、これは を呼び出したビュー コントローラになりますpresentViewController:animated:completion:
。それ以外の場合は、parentViewController
.childViewControllers
デフォルトの実装では、アンワインド アクションを処理するビュー コントローラーをレシーバーの配列で検索します。レシーバーの子ビュー コントローラーのいずれもアンワインド アクションを処理しない場合、レシーバーはアンワインド アクションを処理するかどうかを確認し、処理する場合は self を返します。どちらの場合も、このcanPerformUnwindSegueAction:fromViewController:withSender:
メソッドを使用して、特定のビュー コントローラーがアンワインド アクションを処理する必要があるかどうかを判断します。
viewControllerForUnwindSegueAction:fromViewController:withSender:
ステップ 1 でView Controller が返されない場合、レスポンダー チェーン内の次の View Controller から検索が繰り返されます。
(2 番目の点を強調していることに注意してください。)
だから、私が見る限り、私がやっていることは、どういうわけか、うまくいくはずです. アンワインド セグエは、レスポンダー チェーンを、提示されたビュー コントローラーからUIPopoverController
出て、それを提示しているものに出入りし、チェーンを上って、最終的にアンワインド ハンドラーを見つけます。
しかし、それは機能していません。アイデアはありますか?