класс контроллера iphone view - как - PullRequest
0 голосов
/ 07 июня 2010

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

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

Ответы [ 2 ]

1 голос
/ 07 июня 2010

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

[theMap addSubView:dataTag.view];

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

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

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

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

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

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

0 голосов
/ 07 июня 2010

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

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