2015-05-08 5 views
0

Я следую за этим video (за исключением ссылки на пользовательский вид в коде не в IB), но я объясню, что происходит. Я создал пользовательский вид, который простирается от UiView. Он создается из файла xib. Вот фото из файла xib в InterfaceBuilder:iOS -custom xib-файл, не отображающийся как inputAccessoryView UITextField

enter image description here

Обратите внимание, что владелец файла уже связан с моим пользовательским классом.

Теперь я покажу вам свой собственный класс:

#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 как inputAccessoryViewUITextField У меня есть. Вот неполный код:

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

Почему это не работает? Ничего не появляется. Это из-за того, как я инициализирую пользовательский вид? Когда я проверяю симулятор, ничего не появляется. Я попытался переключить клавиатуру, но ничего не появилось. Остальное приложение работает нормально, но мой пользовательский вид не отображается.

ответ

0

Вы не добавляете subview при вызове 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 
Смежные вопросы