2012-07-16 204 views
2

我有一個if語句,需要知道對象類型是否爲按鈕。如何檢查對象是否爲UIButton

到目前爲止,我有:

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

返回UIButton,所以我知道這是工作。

接下來是if聲明:

if([myObject isMemberOfClass:_______]) 

這是我遇到的問題,因爲我不能提供UIButtonisMemberOfClass:參數。我嘗試使用UIButtonTypeCustom,但它不符合if聲明。

有什麼建議嗎?

謝謝。

回答

7

其他答案和評論已經越來越多了,但它可能會變得更清晰。

當您使用isMemberOfClass:時,參數必須是Class對象。您可以使用class選擇器獲得任何課程的其中一個。因此:現在

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

isMemberOfClass:將只返回YES如果對象是具體的UIButton一個實例。然而,關注一個對象是否繼承了來自特定類的更常見 - 特別是在這裏,因爲UIKit可能在幕後使用UIButton的私有子類。爲此,您需要isKindOfClass:代替:

if ([myObject isKindOfClass:[UIButton class]]) 
    NSLog(@"It's a UIButton or some subclass"); 
else 
    NSLog(@"It's not a UIButton"); 
0

最簡單的一種是

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

根據你的代碼你缺少

if([myObject isMemberOfClass:[UIButton class]]) 
+0

ahh我應該想到這一點。它工作完美,謝謝! – BloonsTowerDefence 2012-07-16 15:56:22

+0

如果myObj子類爲UIButton,這將不起作用。 – lorean 2012-07-16 15:57:56

+0

@lorean是的,這不適用於子類,也不會'isMemberOfClass'工作。爲此,你必須使用'isKindOfClass' – 2012-07-16 15:59:51

0
if ([myObject isMemberOfClass:[UIButton class]]) { 

} 

OR

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

} 
1

對於IS-一個UIButton檢查,這是首選方法 因爲我t會檢查它是否是作爲UIButton站立的NSProxy。雖然任何人都會這樣做是值得懷疑的。

[myObject isMemberOfClass:[UIButton class]] 

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

對於UIButton的

的是,一個或子類
[myObject isKindOfClass:[UIButton class]] 

通常你想使用[myObject respondsToSelector:@selector(someSelector:)]或者(如果myObject的是NSProxy站在對的UIButton會失敗) [myObject conformsToProtocol:@protocol(someProtocol)]使用特定函數時,因爲myObject可能不是您想要的類,但可以實現所需的功能。