問題タブ [target-action]

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.

0 投票する
2 に答える
67 参照

ios - 追加されたスコープ外で作成された場合、barBarttonItem の追加が機能しないのはなぜですか?

barButtons を追加するときにいくつかの問題に遭遇し、別の質問への回答で解決策を見つけましたが、同じスコープでボタンを作成して追加する必要がある理由を説明していませんでした。クラス レベルでボタンを作成して、viewDidLoad などのメソッドに追加できない理由を知りたいです。以下にコピーされたその質問から機能しないコード例:

これにより、@objc メソッド (ここには含まれていません) を認識できないエラーが発生します。ボタンの作成をviewDidLoad内に移動すると、エラーが消えてコードが機能するため、これらのメソッドに問題はありません。

0 投票する
1 に答える
253 参照

swift - クロージャーとしてのSwift UITextFieldターゲットアクション、ターゲットアクションを削除しないという問題

Eric Armstrongのコードから少し変更したコードがあります

クロージャーをターゲットとして UIButton に追加する

しかし、両方のコードに問題があります。エリックからのものは、上のすべてのターゲットアクションを削除します

一方、変更されたコードはターゲット アクションをまったく削除しません。もちろんif条件が原因ですが、Storableプロパティにちゃんと格納されている対象がないことも意味します。

私の目的は、ターゲット アクションをクロージャーに正確に登録し、#selector を介して特定の UITextField に追加された他のすべてのターゲット アクションを削除せずにそれらを削除することです。これで、クロージャ スタイルのターゲット アクションにこのアプローチを使用しながら、ターゲット アクションのすべてまたはどれも削除できました。

アップデート

Eric Armstrongの回答に基づいて、自分のバージョンを実装しました。しかし、Eric によって提案されたバージョンで私が経験したことは、セルが表示されている間に TableView リストの TextField にターゲット アクションを追加し、セルが消えている間にこのターゲット アクションをテキスト フィールドから削除すると、前のコードは実行時にすべてのターゲット アクションを削除するように見えるということremoveTarget(for:)でした。したがって、UITableViewCell のようなコードの別の場所で、セルが消えて再び画面に表示され、removeTarget(for) が実行されたときに、まったく別のターゲット (このカスタム Target() オブジェクトではなく UITableViewCell オブジェクト) に追加のターゲット アクションを追加した場合、これが実行されます。その他 (ターゲット アクションと呼んでいる外部) も削除され、再度呼び出されることはありませんでした。

値型である [String: Target] ディクショナリの使い方に何らかの問題があったと思いますが、objc_getAssociatedObject のプロパティ getter の場合に使用されていました。

したがって、私が理解しているように、特定のキーの objc オブジェクトはなく、Storable は nil であり、nil-coalescing 演算子が呼び出され、静的値型 Property.property return aka [String : Dictionary] がありました

したがって、コピーによって返され、Target オブジェクトはこのコピーされたオブジェクトに格納されました。このコピーされたオブジェクトは、removeTarget(for:) で常に nil として永続的に格納およびアクセスされませんでした。そのため、nil が UIControl.removeTarget() に渡され、すべてのターゲット アクションが常にクリアされました。

[String: Target] Swift 辞書を参照型である NSMutableDictionary に簡単に置き換えてみたので、保存できると思います。しかし、この静的変数の単純な置換と nil-coalesing 演算子を介してそれを返すだけで、Target オブジェクトのストレージが 1 つしかないと仮定したため、Table View をスクロールしているときに、removeForTarget() がすべてのターゲット アクションをすべての UITextFields から何らかの方法で削除したわけではありません。現在からのみ。

また、 String(describing: type(of: Storable.self)) の使用は、特定の Storable タイプに対して常に同じであるため、間違っていると考えています。

0 投票する
1 に答える
305 参照

swift - レイジー ボタンのターゲット アクションが機能しない

Swift 5.1.3、iOS13.3、XCode11.3、

シンプルなボタン ターゲット アクションを作成しようとしています。

ただし、Button は独自の StackView クラス内にあり、さらに遅延ボタンです。

コードでターゲット アクションが機能しないのはなぜですか? つまりcallButtonMethod、呼び出されることはありません。

API の応答が遅いためか、レイジー ボタンがターゲット アクションを実行できないためである可能性があります。私は現時点では無知です。

これについて助けてくれてありがとう。

これが私のコードです:

CockpitHeaderStackViewViewController のカスタム NavigationBar を作成するために使用されます。

を使用したカスタム NavigationBar のコードは次のCockpitHeaderStackViewとおりです。