我有一个自定义类myCustomClass
,它是UITextField
的子类。 (我打算在myCustomClass
课程中致电viewControllers
。)
在myCustomClass
中,我正在尝试检查调用它的类的viewController
类型。 (UIViewController
,UITableViewController
等。)
我试过了:
if ([self.superview.nextResponder isKindOfClass[UIViewController class]]) {
NSLog(@"View Controller");
} else if ([self.superview.nextResponder isKindOfClass[UITableViewController class]) {
NSLog(@"TableView Controller");
}
如果superclass
是viewController
,我只会得到一个结果。所以我做了以下事情:
NSLog(@"%@", self.superview.nextResponder);
结果
UIViewController类 - ViewController
UITableViewController类 - UITableViewCell
如何检查它是否是UITableViewController?
答案 0 :(得分:0)
对于您的特定情况,您可以使用[self.superView isMemberOfClass:[UITableViewCell class]]
检查您的自定义视图是否在表视图单元格内(除非您以不寻常的方式使用tableViewCell!)表示它是从UITableViewController调用的。
更一般地说,如果你想找到包含视图控制器,你可以递归地向上走响应者链,找到包含viewController的内容,如本帖子的第二个答案: Get to UIViewController from UIView?
同样重要的是要注意isKindOfClass:
和isMemberOfClass:
isKindOfClass
返回YES。
isMemberOfClass
返回YES。
因此,从UIViewController继承的UITableViewController将对isKindOfClass:[UIViewController class]
回答“是”,您的if
语句是否会意外执行。 (虽然在示例中它也无法正常工作,因为您仍然需要进一步向上走动响应链。)
因此,如果您实际上正在将UIViewController与UITableViewController进行比较,请使用-isMemberOfClass
,并且示例中的逻辑将按预期工作。