在isKindOfClass中未检测到从UIButton继承的自定义类:

Has*_*eed 1 iphone objective-c uibutton ios

我创建了一个自定义按钮类,其中包含一些继承自UIButton的额外属性.使用普通按钮将其添加到以下视图中:

EFButton *btn = [EFButton buttonWithType:UIButtonTypeRoundedRect];    
btn.frame = CGRectMake(500, 100, 100, 44);
btn.backgroundColor = [UIColor lightGrayColor];
btn.userInteractionEnabled = NO;
[self.view addSubview:btn];

UIButton *nBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];    
nBtn.frame = CGRectMake(500, 100, 100, 44);
nBtn.backgroundColor = [UIColor lightGrayColor];
nBtn.userInteractionEnabled = NO;
[self.view addSubview:nBtn];
Run Code Online (Sandbox Code Playgroud)

循环遍历视图中的对象,如:

  for (id view in self.view.subviews) 
{

    if ([view isKindOfClass:[EFButton class]]) 
    {
        //** dsnt come here **
        NSLog(@"EFButton Class");
        EFButton *btn = view;
    }
    if ([view isKindOfClass:[UIButton class]]) 
    {
        //** come here **
        NSLog(@"UIButton Class");
        UIButton *btn = view;
    }
}
Run Code Online (Sandbox Code Playgroud)

UIButton是有效的,但它不是在isKindOfClass:[EFButton类]的条件下.请帮助我解决我做错了什么或者需要做些什么.

Guo*_*uan 5

它是因为buttonWithType是一个类方法UIButton,它返回UIButton类型,虽然你EFButton继承UIButton,但它不能返回 EFButton 类型

引用开发者文档

If you subclass UIButton, this method does not return an instance of your subclass
Run Code Online (Sandbox Code Playgroud)

PS:我不认为继承UIButton是一种好方法.