2010-06-07 3 views
0

Мне нужно создать свой собственный класс UIView, и это не то, что я должен был сделать. Я создал класс, а затем выложил небольшой вид в IB (это всего лишь несколько ярлыков, которые мне потом нужно будет добавить в данные). но теперь я застрял в том, как на самом деле поставить экземпляр этого в моем основном представлении. Может ли кто-нибудь указать мне в сторону хорошего учебника? Самое близкое, что я сделал с этим, - создать пользовательский tableViewCell.iphone view controller class - как до

DataTagViewController.m:

- (id)initWithNibNamed:(NSString *)DataTagViewController bundle:bundle { 
    if ((self = [super initWithNibName:DataTagViewController bundle: bundle])) { 
     // Custom initialization 
    } 
    return self; 
} 


MapView.m: 

    DataTagViewController *dataTag = [[DataTagViewController alloc] initWithNibNamed:@"DataTagViewController" bundle:nil]; 

    [theMap addSubView: dataTag.view]; <<< this line causes the crash (theMap is a UIView) 

теперь я получаю эту ошибку во время выполнения при добавлении подвида: - [UIView addSubView]: непризнанный селектор направил к экземпляру 0x470f070' 2010-06-06 21:22: 08.931

ответ

1

UIViewController - это не представление, но управление видом. Если ваш класс DataTagViewController расширяет UIViewController, то вы хотите, чтобы добавить его мнение, а не сам класс:

[theMap addSubView:dataTag.view]; 

Кроме того, у вас есть DataTagViewController.xib созданный файл, который имеет свой взгляд на это? Если вы этого не сделаете, вам нужно будет создать его и использовать initWithNibName:bundle. В противном случае вам придется реализовать метод loadView вместо этого, чтобы предоставить свой собственный вид через код.

Редактировать

Ваша функция инициализации использует имя вашего класса в качестве переменной. Вероятно, это не сработает. Используйте sigature по умолчанию:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) 
    { 
    } 
} 

Если вы ничего не делаете за функцию инициализации, вам не нужно реализовать этот метод. Достаточно вашего оператора alloc/init.

Для получения хорошего руководства прочитайте руководство View Controller Programming в документах.

+0

Благодарим вас за помощь - просмотрите мои правки выше – Brodie

+0

- (id) initWithNibNamed: (NSString *) Комплект DataTagViewController: bundle .... вы не хотите, чтобы ваше имя переменной было таким же, как имя класса. – typeoneerror

+0

отлично - я создал объект и нет сбоя, но дататаг все еще не отображается в представлении. – Brodie

0

Что такое родительский класс DataTagViewController? Вы говорите, что вам нужно создать «мой собственный класс UIView», но ваш пример предполагает, что вы действительно хотите создать подкласс UIViewController. initWithNibNamed: метод UIViewController. Если ваш родитель - UIView, то «непризнанный селектор» имеет смысл.

+0

Возможно, я делаю все это неправильно. Все, что мне действительно нужно, это создать представление (называемое datatag), которое я создал, которое содержит 5 uilabels, которые мне нужно, чтобы иметь возможность постоянно изменять данные. Я создал класс UIViewController, называемый DataTagViewController, затем сконструировал DataTagViewController.xib. – Brodie

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