そのため、ブロックをセレクターとしてボタンに渡す方法を調べてみましたが、答えは必要以上に複雑に思えます。
doBlock;
と呼ばれるメソッドとと呼ばれるブロック変数を使用して UILabel をサブクラス化し、blockToDo
すべてのメソッドが行うのは callだけだとすると、次のblockToDo ();
ようなことができませんでした。
myLabel.blockToDo = ^myBlock;
[myButton addTarget: myLabel action: @selector (doBlock) forControlEvents: UIControlEventTouchUpInside];
それとも、私が気付いていないトラブルに巻き込まれるのでしょうか?
編集: つまり、ここには 2 つのことがあります。私が本当にやりたかったことと、私が尋ねた質問への答えです。それらは別のものです。
私の質問を表現する別の方法は、それを 2 つに分割することです。半分は、「単純なメソッドを UILabel に追加したい場合、それをサブクラス化してそのメソッドを追加できますか、それとも UILable のサブクラスが義務付けられている他のことがたくさんありますか?」残りの半分は、「doBlock;
サブクラスにメソッドを追加することは、ブロックをセレクターとして渡す最も簡単な方法のようですが、これらのボードのすべての提案は、その目的のためにまったく新しいクラスを定義することであるように思われます.余分な作業がたくさんあります。なぜですか?」
ほとんどの人がその 2 番目の質問に取り組んでいるように見えますが、これは理解できることです。なぜなら、それは実際には元の質問のより明白な部分だからです。
しかし、私が本当にやりたかったことは、doBlock;
メソッドを持つカテゴリを定義し、連想参照^myBlock
を使用してivar をカテゴリ内に格納することです。カテゴリを使用して任意のクラスにブロックを追加するだけで、@selector (doBlock)
.
だから、私はこれをどのようにまとめるかわかりません。私が尋ねた質問は部分的に回答されましたが、私が本当にやりたかったことは、定式化された質問に直接関係していないことがわかりました. ベスト アンサーはどのように授与すればよいですか?