我是從TableViewCell派生的。當我查詢有關索引路徑的表視圖時,它返回一個UITableViewCell。我如何找到這個對象是我的自定義類型「CustomCell」之一?Objective C如何查詢對象是否屬於某個類
4
A
回答
3
if ([cell isKindOfClass:[CustomCell class]]) {
[(CustomCell*)cell customCellMethod];
}
2
if ([cell isKindOfClass:[CustomCell class]]) {
// ...
}
1
一如往常,在面向對象的設計,嘗試使用實例的階級身份是一個代碼味道,應該提高的標誌。你想要用自定義單元格做什麼?也許有人可以提出更好的方法。
不管怎樣,依賴於接口(Objective-C中的@protocol
)的設計要好得多,因爲它有助於解耦您的設計。用您需要的相關API定義@protocol
,並讓CustomCell
實現該協議。在你的代碼中,你可以測試:
if([cell conformsToProtocol:@protocol(MyCellProtocol)]) {
//...
}
而不是測試類身份。
如果您只需要一種方法,您可以使用[cell respondsToSelector:@selector(myMethod)]
。
0
實際上有兩種方法可以在這裏使用。您可能需要的是isKindOfClass:
,但還有另一種方法稱爲isMemberOfClass:
,如果接收方是提供的類的實例,而不是子類的實例,則這將只返回YES
。
例如,如果DerivedClass
是BaseClass
一個子類,那麼這裏的每個方法的結果:
BOOL isKind = [aDerivedInstance isKindOfClass:[BaseClass class]]; // YES
BOOL isMember = [aDerivedInstance isMemberOfClass:[BaseClass class]]; // NO
相關問題
- 1. c#如何檢查對象是否屬於某種類型
- 2. 如何檢查外鍵對象是否屬於某種類型
- 3. 如何檢查兩個對象是否屬於同一個類?
- 4. 如何檢查某個對象是否爲某種類型
- 5. Objective-C:如果一個對象屬於一個類,這是否意味着對象不是nil或null?
- 6. Objective C如何檢查並查看對象是否被選中?
- 7. 如何查找某個類是否存在對象
- 8. 檢查一個對象是否屬於一個通用類
- 9. 如何判斷某個類是否繼承自NSObject(Objective-C)
- 10. 如何檢查一個對象是否爲類c的類型?
- 11. 如何檢查對象是否是某種類型的數組?
- 12. 如何檢查一個對象的屬性等於某個值?
- 13. 如何檢查對象是否具有某些方法/屬性?
- 14. objective-c檢查是否忘記了某個/某些版本
- 15. 如何檢查某個對象是否爲某種類型的數組
- 16. 如何查找某個類的對象
- 17. 如何檢查某個類的註釋是否屬於特定類別?
- 18. 無法確定某個對象的某個屬性是否大於該對象的另一個屬性
- 19. 如何檢查兩個對象在Actionscript中是否屬於同一類型?
- 20. 檢查一個屬於某個對象的數組是否爲空
- 21. 如何檢查一個類(元類對象)對象是否與另一個類對象相等
- 22. Objective-C檢查兩個對象是否碰撞
- 23. 如何檢查NSSet是否包含某種類的對象?
- 24. Android sqllite,查詢屬於另一個對象屬性的對象
- 25. Mediawiki-PHP:檢查一篇文章是否屬於某個類別
- 26. 如何檢查一個類或CFType是否可用Objective-C
- 27. 如何檢查對象是否等於同一個類的新對象?
- 28. 如何查看某個類是否有屬性?
- 29. 如何檢查某個類型是否標有屬性?
- 30. 如何查找對象基於ArrayList中的某個屬性並編輯對象
我認爲用例是在這種情況下,很清楚。特別是用ObjectiveC打字的方式。你有一個表格視圖,裏面填充了'UITableViewCell'各個子類的單元格,並且你要求''tableView cellForRowAtIndexPath:indexPath]'。該table view方法只承諾返回一個'UITableViewCell'的實例,唯一的方法就是知道你是否有該單元的一個子類,以測試它的類。你可以創建一個協議,但是你會把大部分的自定義單元方法放在裏面,使得事情變得更加冗長,看起來沒什麼好處。 – 2010-04-08 16:50:09