динамически создавать подкласс iphone - PullRequest
0 голосов
/ 19 апреля 2011

Я нахожусь в процессе создания некоторого универсального класса.

И я создаю три view-controller и создаю enum

typedef enum Type {
    type1,
    type2,
    type3,
} Type;

, и для трех разных типов мне нужно использоватьподкласс различных контроллеров представления.Но пользователь чувствует себя как один.(я имею в виду, что я могу предоставить ему интерфейс в этом интерфейсном классе, нам нужно решить, какой контроллер использовать).

Я пытаюсь вот так, я создаю класс и переопределяю метод init следующим образом:

- (id)initWithReaderType:(ReaderType )readerType    {

        switch (readerType) {
            case 0: {
                Slider *slider = [[Slider alloc] init];
                return slider;
            }
            case 1: {
                //use other controller
                break;
            }
            default:    {
                NSLog(@"Exception on Initialization : Un Recognized Reader Type");
                break;
            }
        }

    return nil;
}

Но он возвращается как объект id, поэтому я не могу использовать его в качестве объекта контроллера представления, и у меня нет доступа к свойствам и методам этого класса контроллера.

Как мне этого добиться?

спасибо заранее ....

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

Вы можете просто привести идентификатор (указатель) к UIViewController (или любому из его подклассов).

id result = [self initWithReaderType:type1];
// Check if we can cast.
if ([result isKindOfClass[UIViewController class]]) {
   UIViewController *viewController = (UIViewController *)[self initWithReaderType:type1];
}

Вы можете изменить UIViewController на свой собственный класс.

0 голосов
/ 19 апреля 2011

Я думаю, что вы можете привести к типу, который вы хотите.Например:

Slider *incomeSlider = (Slider *)[self initWithReaderType:type1];

Вы можете попробовать таким образом.

...