2013-12-13 5 views
0

Я пишу пользовательский вид CustomViewA : UIView<UITextFieldDelegate> и реализует методы делегата.Не удается заставить UITextFieldDelegate работать

И в INIT в CustomViewA, я пишу:

- (id)initWithFrame:(CGRect)frame { 
    self = [[[NSBundle mainBundle] loadNibNamed:@"CustomViewA" owner:self options:nil] objectAtIndex:0]; 
    if (self) { 
     //the txtfieldA is a IBOutlet property linked to the nib file. 
     self.txtfieldA.delegate = self; //not work 
    } 
    return self; 
} 

И в этом XIB файл включает в себя UITextField контроль, который я поставил его делегат в init method.But, когда я запускаю это и редактировать текстовое поле, методы делегата: не. Позвольте мне сказать, почему? И как я могу это исправить ??

+1

Пожалуйста, пост всего метода инициализации –

+0

Также, пожалуйста, напишите код, который создает и использует CustomViewA. –

+0

Я добавляю их, спасибо –

ответ

0

Чтобы загрузить вид, который сабы в UIView из файла XIb, вы можете сделать так:

// Reusable method to load a class which subclass UIView from a xib. 
+ (id)loadNibNamed:(NSString *)nibName ofClass:(Class)objClass andOwner:(id)owner { 
    if (nibName && objClass) { 
     NSArray *objects = [[NSBundle mainBundle] loadNibNamed:nibName owner:owner options:nil]; 

     for (id currentObject in objects){ 
      if ([currentObject isKindOfClass:objClass]) 
       return currentObject; 
     } 
    } 

    return nil; 
} 

Затем добавить мнение в контроллере:

myCustomViewA = [self loadNibNamed:@"customviewA" ofClass:[CustomViewA class] andOwner:self]; 

myCustomViewA.delegate = self; // Or do this in the xib file 
[self.view addSubview:myCustomViewA]; 
+0

Я не знаю, есть ли какие-либо различия между 'self = [[[NSBundle mainBundle] loadNibNamed: @" CustomViewA "владелец: self options: nil] objectAtIndex: 0];' и ваши 'NSArray * objects = [[NSBundle mainBundle] loadNibNamed: владелец nibName: параметры владельца: nil]; для (id currentObject в объектах) { if ([currentObject isKindOfClass: objClass]) return currentObject; } '? Не могли бы вы объяснить мне подробности? –

+0

С моей стороны, я действительно проверяю тип вида, который я получаю. Если вы берете объект с индексом 0, вы действительно не знаете, есть ли вид, который вы хотите. Я согласен с вами, ваш метод работает, но это слишком опасно. –

0

Убедитесь, что UITextField правильно подключен к IBOutlet CustomViewA. В противном случае, пытаясь установить делегат в init не будет делать ничего,

//if self.myTextField is nil, then this does nothing 
self.myTextField.delegate = self; 
0

просто не использовать - (ID) инициализации, если вы инициализации вид из XIb файлов.

и установите способ делегата UITextField в - (void)awakeFromNib..

+0

Я делаю, как вы сказали, бесполезно. '- (void) awakeFromNib { [super awakeFromNib]; self.tvSizeMax.delegate = self; self.tvSizeMin.delegate = self; } ' –

+0

как вы устанавливаете CustomViewA? 'CustomViewA * cusomViewA = [[[NSBundle mainBundle] loadNibNamed: @« CustomViewA »владелец: self options: nil] lastObject]', 'then cusomViewA.delegate = self.view (где вы добавляете cusomViewA как subView)', только в этом вы получаете вызов '- (void) awakeFromNib'. – johnMa

+0

также меня смущает 'self.tvSizeMax' и' self.tvSizeMin', они UITextField? – johnMa

Смежные вопросы