2

ifオブジェクト タイプがボタンかどうかを知る必要があるステートメントがあります。

これまでのところ、私は持っています:

NSLog(@" %@ ",[myObject class]);

を返すUIButtonので、それが機能していることがわかります。

次にif発言です。

if([myObject isMemberOfClass:_______])

UIButtonのパラメータとして指定できないため、ここで問題が発生しますisMemberOfClass:。を使用してみましたが、ステートメントUIButtonTypeCustomを満たしていませんでした。if

助言がありますか ?

ありがとう。

4

4 に答える 4

7

他の回答とコメントはすでにこれに取り組んでいますが、より明確にする必要があります。

を使用する場合isMemberOfClass:、引数はClassオブジェクトでなければなりません。classセレクターを使用して、任意のクラスのこれらのいずれかを取得できます。したがって:

if ([myObject isMemberOfClass:[UIButton class]])
    NSLog(@"It's a UIButton");
else
    NSLog(@"It's not a UIButton");

は、オブジェクトが具体的に のインスタンスである場合にisMemberOfClass:のみ戻ります。ただし、オブジェクトが特定のクラスから継承されているかどうかに関心を持つ方が一般的です。特にここでは、UIKit が舞台裏でプライベート サブクラスを使用する可能性があるためです。そのためには、代わりに次のようにします。YESUIButtonUIButtonisKindOfClass:

if ([myObject isKindOfClass:[UIButton class]])
    NSLog(@"It's a UIButton or some subclass");
else
    NSLog(@"It's not a UIButton");
于 2012-07-16T16:30:26.723 に答える
1

is-UIButtonチェックの場合、これは、UIButtonとして代用しているNSProxyであるかどうかをチェックするため、推奨される方法です。誰もがそうするかどうかは疑わしいですが。

[myObject isMemberOfClass:[UIButton class]]

または(myObjectがUIButtonの代わりにNSProxyである場合は失敗します)

if([myObject class] == [UIButton class])

is-aまたはUIbuttonのサブクラスの場合

[myObject isKindOfClass:[UIButton class]]

myObjectは必要なクラスではないかもしれませんが、必要な機能を実装できる可能性があるため、通常は、[myObject respondsToSelector:@selector(someSelector:)]または[myObject conformsToProtocol:@protocol(someProtocol)]特定の関数を使用するときに使用します。

于 2012-07-16T16:26:59.630 に答える
0

最も簡単なのは

if([myObj class] == [UIButton class])

あなたのコードによると、あなたは行方不明です

if([myObject isMemberOfClass:[UIButton class]])
于 2012-07-16T15:55:16.557 に答える
0
if ([myObject isMemberOfClass:[UIButton class]]) {

}

また

if ([myObject isKindOfClass:[UIButton class]]) {

}
于 2012-07-16T15:56:29.083 に答える