获取自定义的 superView class
Get superView of custom class
我有一个自定义 class myCustomClass
,它是 UITextField
的子class。 (我将在 viewControllers
class 中调用 myCustomClass
。)
在 myCustomClass
中,我试图检查调用它的 viewController
和 class 是哪种类型。 (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 Class - ViewController
UITableViewController Class - UITableViewCell
如何检查它是否是 UITableViewController?
对于您的特定情况,您可以使用 [self.superView isMemberOfClass:[UITableViewCell class]]
来检查您的自定义视图是否在 table 视图单元格内,这(除非您在不寻常的情况下使用 tableViewCell方式!)意味着它是从 UITableViewController 调用的。
更一般地说,如果您想找出包含视图控制器,您可以递归地沿着响应链向上查找包含 viewController,如本 post 中的第二个答案所示:
Get to UIViewController from UIView?
同样重要的是要注意 isKindOfClass:
和 isMemberOfClass:
之间的区别
isKindOfClass
returns 如果 'the receiver is an instance of given class or an instance of any class that inherits from that class.'
是
isMemberOfClass
returns YES 如果'接收方是给定 class.'
的实例
因此,您的继承自 UIViewController 的 UITableViewController 将对 isKindOfClass:[UIViewController class]
回答 YES,您的 if
语句是否会发生意外行为。 (尽管在示例中它也没有正常工作,因为您仍然需要进一步沿着响应链向上走)。
因此,如果您实际上是在将 UIViewController 与 UITableViewController 进行比较,请使用 -isMemberOfClass
并且示例中的逻辑将按预期工作。
我有一个自定义 class myCustomClass
,它是 UITextField
的子class。 (我将在 viewControllers
class 中调用 myCustomClass
。)
在 myCustomClass
中,我试图检查调用它的 viewController
和 class 是哪种类型。 (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 Class - ViewController
UITableViewController Class - UITableViewCell
如何检查它是否是 UITableViewController?
对于您的特定情况,您可以使用 [self.superView isMemberOfClass:[UITableViewCell class]]
来检查您的自定义视图是否在 table 视图单元格内,这(除非您在不寻常的情况下使用 tableViewCell方式!)意味着它是从 UITableViewController 调用的。
更一般地说,如果您想找出包含视图控制器,您可以递归地沿着响应链向上查找包含 viewController,如本 post 中的第二个答案所示: Get to UIViewController from UIView?
同样重要的是要注意 isKindOfClass:
和 isMemberOfClass:
isKindOfClass
returns 如果 'the receiver is an instance of given class or an instance of any class that inherits from that class.' 是
isMemberOfClass
returns YES 如果'接收方是给定 class.' 的实例
因此,您的继承自 UIViewController 的 UITableViewController 将对 isKindOfClass:[UIViewController class]
回答 YES,您的 if
语句是否会发生意外行为。 (尽管在示例中它也没有正常工作,因为您仍然需要进一步沿着响应链向上走)。
因此,如果您实际上是在将 UIViewController 与 UITableViewController 进行比较,请使用 -isMemberOfClass
并且示例中的逻辑将按预期工作。