Невозможно загрузить UIView в отдельном ViewController с NSObject - PullRequest
1 голос
/ 25 января 2010

Приложение представляет собой тип проекта на основе представления.Я использую NSObject в View XIB (UIView Nib), предположим, что этот объект является верхней панелью приложения.

MainController UIViewController загружает начальный экран.это выглядит так,

UIViewController Изображение MainViewController

я хотел загрузить вид сверху (новый, назовите его X) Разработанный отдельно в верхнем представлении (красный цвет)на изображении выше.

Теперь у меня есть NSObject, который находится внутри "X" и связывает все события и имеет полный контроль над X, его одноэлементным объектом.

в NSObject Class iесть метод для возврата экземпляра собственного объекта и экземпляра uiview ("X"), которым он управляет.

Методы:

-(UIView*)ReturnTopBarView
{
            NSLog(@"called 2");
    return topBarObject.topBarView;
}

//Provides the top bar instance to all the view controllers.
//Singleton Implementation.
+ (id)GetTopBarObject
{
    if(topBarObject == nil)
    {
        NSLog(@"called 1");
        return [[TopBarObject alloc] init];
    }
    return topBarObject;    
}

topbarview - это полностью разработанный topbarview ("X "), который должен входить в верхнюю панель контроллера основного вида (сегмент красного цвета на изображении выше).

я написал метод в контроллере основного вида как:

-(void)SetHomeScreen
{
    self.topView = [[TopBarObject GetTopBarObject] ReturnTopBarView];
}

iвызвать -(void)SetHomeScreen в моем appdelegate.applicationdidfinishlaunching как [viewcontroller SetHomeScreen]

Это фактически вызывает соответствующие методы в NSObject (класс TopBarObject), но я не вижу обновленного представления в (mainviewcontroller.topbarview).Теперь это главная проблема.

У меня есть верхняя панель и нижняя панель с изображениями и значками.Поэтому я выбрал этот способ проектирования.Я не уверен, является ли это наилучшим способом, я просто ищу наиболее оптимальный дизайн системы, чтобы сделать эту работу эффективной.Если вы думаете, что есть другой способ, который намного лучше, чем этот, пожалуйста, поделитесь им со мной.

Ответы [ 2 ]

0 голосов
/ 25 января 2010

Где в appdelegate.applicationdidfinishlaunching это называется?
Если вы звоните до того, как представление фактически настроено, все, что вы делаете, это устанавливаете ноль с чем-то.
Попробуйте viewcontroller.view; до [viewcontroller SetHomeScreen]

0 голосов
/ 25 января 2010

Я вижу, что синглтон неверен. Это должно быть примерно так:

+ (id)GetTopBarObject {
    if(topBarObject == nil) {
        topBarObject = [[TopBarObject alloc] init];
    }
    return topBarObject;
}

В вашем коде topBarObject никогда не инициируется, и поэтому каждый раз при вызове GetTopBarObject он генерирует новый TopBarObject и возвращает его ...

...