iOS - 自定义 xib 文件未显示为 UITextField 的 inputAccessoryView

iOS -custom xib file not appearing as inputAccessoryView of UITextField

我正在关注这个 video(除了我在代码中链接自定义视图而不是在 IB 中),但我会解释发生了什么。我已经创建了一个扩展 UiView 的自定义视图。它是从 xib 文件创建的。这是 interfacebuilder 中 xib 文件的照片:

请注意,文件所有者已链接到我的自定义 class。

现在我将向您展示我的习惯 class:

#import "CostcoLoginView.h"

@implementation CostcoLoginView

-(id)initWithFrame:(CGRect)frame{

    self = [super initWithFrame:frame];
    if(self){

    }
    return self;
}


-(id)initWithCoder:(NSCoder *)aDecoder{

    self=[super initWithCoder:aDecoder];
    if(self){
        [[NSBundle mainBundle] loadNibNamed:@"CostcoLoginView" owner:self options:nil];

    [self addSubview:self.view];
    }
    return self;
}




@end

这是我的自定义视图的头文件:

#import <UIKit/UIKit.h>

@interface CostcoLoginView : UIView
@property (strong, nonatomic) IBOutlet UIView *view;



@end

注意我有的 属性:这是一个链接到上图所示的 interfacebuilder xib 文件的视图。

到目前为止一切看起来都很好。我现在的目标是将此自定义 UIView 用作我拥有的 UITextFieldinputAccessoryView。这是部分代码:

 usernameField.inputAccessoryView = [[CostcoLoginView alloc] init ];

为什么这不起作用?什么都没有出现。是因为我如何初始化自定义视图吗?当我签入模拟器时,什么也没有出现。我尝试切换键盘但没有出现。应用程序的其余部分工作正常,但我的自定义视图没有出现。

你调用init的时候没有添加子视图,忘记在xib中设置视图的框架。 所以你可以把你的代码改成这个然后试试。

 #import "CostcoLoginView.h"

@implementation CostcoLoginView

-(id)initWithFrame:(CGRect)frame{

    self = [super initWithFrame:frame];
    if(self){
        [self setup];
    }
    return self;
}


-(id)initWithCoder:(NSCoder *)aDecoder{

    self=[super initWithCoder:aDecoder];
    if(self){
        [self setup];
    }
    return self;
}
-(id)init{
    self = [super init];
    if (self) {
        [self setup];
    }
    return self;
}
-(void)setup{
    [[NSBundle mainBundle] loadNibNamed:@"CostcoLoginView" owner:self options:nil];
    self.view.frame  = self.bounds;
    [self addSubview:self.view];
}

@end