Не удается загрузить пользовательский вид из пера в другой вид, созданный программно? - PullRequest
0 голосов
/ 30 декабря 2011

Глядя на некоторые другие вопросы, это код, который я реализовал в .m представления, реализующего пользовательскую клавиатуру.

- (id)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
if (self) {

    self.userInteractionEnabled = YES;

    [self addGestureRecognizer:
     [[UITapGestureRecognizer alloc] initWithTarget:self
                                             action:@selector(becomeFirstResponder)]];


   NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"FormulaKeyboard" owner:self options:nil];

    for (id object in bundle) {
        if ([object isKindOfClass:[FormulaKeyboard class]])
            keyboard = (FormulaKeyboard *)object;
    }   


    self.inputView = keyboard;





}
return self;

}

Ниже приведена ошибка,появился.

* Завершение работы приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[setValue: forUndefinedKey:]: этот класс не соответствует значению ключа, соответствующему кодированию для представления ключа.'

Когда я загружаю перо в реальном контроллере вида, он работает нормально.Однако, как показано выше, он не работает, когда я пытаюсь загрузить его в другое представление.

Кроме того, в nib я установил класс владельца файла на UIViewController и прикрепил его к основному представлению, так как этобыло то, что другой ТАК задал вопрос.Я не уверен, что мне нужно изменить это, так как я добавляю пользовательское представление в другое представление, а не контроллер viewc.

Спасибо

РЕДАКТИРОВАТЬ:

.h зрения реализации клавиатуры

@interface EquationTextField : UIView <KeyInput> {

FormulaKeyboard *keyboard;

}

@property (readwrite, retain) UIView *inputView;
@end

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Внутри xib если вы ctrl + click * File's Owner, вы, скорее всего, увидите, что у вас есть view розетка, которая подключена к объекту view верхнего уровня в xib .

enter image description here

  1. Относится к IBOutlet в вашем коде
  2. Относится к объекту в Интерфейсном Разработчике

Причина, по которой это работает внутри UIViewController, заключается в том, что UIViewController имеет свойство view, которое подключается при загрузке xib.

Подкласс UIView обычно не имеет свойства с именем view, поэтому вы получаете исключение.

Похоже, что вы извлекаете элемент из массива объектов верхнего уровня, возвращенного методом loadNibNamed:owner:options:, вам не нужно это соединение в xib. Поэтому вы можете отключить это соединение в файле xib.

В качестве альтернативы

Вы могли бы:

  • Измените класс File's Owner на класс вашего пользовательского представления.
  • Марка inputView и IBOutlet
  • Подключите inputView к пользовательской клавиатуре в xib
  • Тогда просто используйте

    [[NSBundle mainBundle] loadNibNamed:@"FormulaKeyboard" owner:self options:nil];
    
0 голосов
/ 30 декабря 2011

Кажется, что у вашего представления нет свойства, называемого 'inputView', поэтому, когда вы устанавливаете свойство на self, вы получаете исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...