2013-12-10 4 views
0

myobject.hМожно ли использовать viewController view в NSObject?

@interface serverBaglantisi : NSObject<MBProgressHUDDelegate> { 
    MBProgressHUD *HUD; 
} 

myObject.m

-(void) callHud:(NSString*)text{ 

    HUD = [[MBProgressHUD alloc] initWithView:self.view]; // here 

    [self.view addSubview:HUD];// here 
    HUD.delegate = self; 
    HUD.labelText = text; 
    [HUD showWhileExecuting:@selector(myProgressTask) onTarget:self withObject:nil animated:YES]; 
} 

Я также использовать класс MBProgressHud. Если я добавлю метод callHud в viewController.m (а также добавлю myProgressTask в viewController.m), тогда все будет работать. Но мне интересно, можно ли вызвать внутри моего NSObject успешно?

Извините за вопрос noob Я новичок в iOS-разработчике.

ответ

0

Np, вы не можете. NSObject не определяет свойство, называемое view. Но вы можете передать контроллер представления к объекту:

- (void)showHudWithMessage:(NSString*)text fromViewController:(UIViewController *)viewController 
{ 
     HUD = [[MBProgressHUD alloc] initWithView:viewController.view]; 
     [viewController.view addSubview:HUD]; 
     HUD.delegate = self; 
     HUD.labelText = text; 
     [HUD showWhileExecuting:@selector(myProgressTask) onTarget:self withObject:nil animated:YES];  
} 
+1

это очень хорошая идея ... и спасибо вам, например ... – Antiokhos

+0

Я просто попробую ваш пример. Отсутствует одна строка [viewController.view addSubview: HUD]; Я редактирую свой оригинальный вопрос с вашего ответа. Еще раз спасибо – Antiokhos

+0

Я обновил свой ответ. Кроме того, вы не должны ставить ответы на вопрос. – neilco

0

Короткий ответ: -

НЕТ, вы не можете добавить подвид внутри класса, который наследует от NSObject. Вы можете добавлять только subview, который наследуется от viewController. Поскольку каждый viewController содержит экземпляр представления, в котором NSObject этого не делает.

+0

Хмм спасибо большое ... – Antiokhos

+0

@AntioKhos, ваш прием :) –

0

Вы можете добавить @properties (week) UIView *view; к вашему myobject.h и в четыре контроллера представления после создания MyObject вы можете добавить myObjectObject.view = self.view; и после вызова callHud: он должен работать. Или вы можете изменить способ принять UIView:

-(void) callHud:(NSString*)text view:(UIView*)view{ ...} 

И вы можете вызвать его из контроллера вида, как:

[myObjectObject callHud:@"Your text" view:self.view 
0

В AppDelegate.h

+ (AppDelegate*)sharedDelegate; 

В AppDelegate.m

+ (AppDelegate*)sharedDelegate{ 

    return (AppDelegate*)[UIApplication sharedApplication].delegate; 
} 

в вашем NSObject.h классе

- (void)startHUD; 

Тогда в классе NSObject.m

-(void)startHUD{ 

    AppDelegate * app = [AppDelegate sharedDelegate]; 

    //--- to start the activity indicatior ---- 
    MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo:app.window animated:YES]; 
    hud.mode = MBProgressHUDModeIndeterminate; 
    //hud.contentColor = [UIColor colorWithRed:0.f green:0.6f blue:0.7f alpha:1.f]; 
    [app.window bringSubviewToFront:hud]; 
} 
Смежные вопросы