2012-07-04 2 views
3

У меня есть класс A, у которого есть панель инструментов (созданная прогативно) & с свойство (неатомное, удержание). Я добавил, что панель инструментов как подкласс в классе A В другом классе B. Я хочу создать панель инструментов класса A скрытоiPhone: Скрыть панель инструментов

Как это сделать? я использую, но он не работает? пожалуйста, дайте мне решение. Я использую Xcode 4.3.1

Я пишу этот код в классе B

но не работает

ClassA *aobj= [[classA alloc] init]; 

[aobj.toolbar sethidden:yes]; 
+1

передать объект класса А пусть это будет в B с помощью метода делегата и сделать [a.toolbar sethidden: да]; –

+1

Опубликуйте фактический код. –

+0

Предполагая, что ClassA и ClassB являются обоями? –

ответ

1

Добавить extern id context; в classA.h затем добавить id context; classA.m (@place, где глобальные varriable объявлены) и add context = self; в ViewDidLoad из CLASSA. Затем импортируйте classA.h в classB и [context.toolbar sethidden:yes];, здесь вы делаете объект класса a как exernal varriable.This не является хорошим методом. Если вам нужен лучший метод PLS, объясните, как и где вы создаете классB.

0

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

+0

: спасибо за проявленный интерес к моему вопросу С помощью приведенных выше ответов я решил свою проблему –

1

Проблема вашего кода в том, что вы создаете новый экземпляр ClassA и пытаетесь установить UIToolBar, скрытый в этом новом экземпляре, который никогда не отображается.

Что вам нужно - это объект, который указывает на ClassA, который отображается на экране.

Так попробовать что-то вроде этого:

- (id)initWithClassA:(ClassA *)classa { 
    if ((self = [super init])) { 
      [classa.toolbar sethidden:yes]; 
    } 
    return self; 
} 

И когда вы делаете экземпляр ClassB вы используете это:


Если вы хотите, чтобы скрыть только тогда, когда ClassB сделал панель инструментов вы можете создать переменную ClassA по адресу ClassB.h и установить ее в параметр, который предоставляется в вашем самосозданном i нит-метод:

- (id)initWithClassA:(ClassA *)classa { 
    if ((self = [super init])) { 
      instanceOfClassA = classa; 
    } 
    return self; 
} 
+0

Я понял проблему, но я не могу использовать ваш код Где именно использовать этот код Как класс уже имеет - (id) initWithNibName метод –

+0

Я думаю, что вы инициализируете 'ClassB' где-то в' ClassA', а затем вы будете показывать 'ClassB'. Теперь вместо использования '[[ClassB alloc] initWithNibName: @" ... "]' вы используете '[[ClassB alloc] initWithClassA: self]'. То, что вы делаете, - передать 'self' (self - это оригинальный' ClassA'-Object) в 'ClassB', где он хранится и где вы можете его использовать, чтобы скрыть панель инструментов. Класс - это своего рода дескриптор, как будет выглядеть ваш объект, объект основан на вашем классе и имеет свое конкретное место в памяти, если вы создадите новый экземпляр, вы поймете новое место в памяти, понимаете? –

+0

Большое спасибо за ваш ценный ответ, он действительно помог мне решить мою проблему. Ваш ответ правильно объяснил, где я ошибся, и что нужно сделать, чтобы решить проблему. Еще раз спасибо –

1

[[classA alloc] init]; создает новый объект ClassA. Этот новый объект ClassA имеет свою новую панель инструментов. Это не созданная ранее панель инструментов.

Чтобы получить доступ к старой панели инструментов ClassB, вам необходимо передать старый объект ClassA в ClassB. (Вы также можете использовать метод делегата, где на время выполнения он будет решать, какой класс называть)

Использование initWithNibName передачи параметров метода:

в ClassB.h

UIViewController *parentController;

-(id)initWithNibNameAndParentController:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil:(UIViewController*)controller; 

В ClassB.m

-(id)initWithNibNameAndParentController:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil:(UIViewController*)controller { 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
parentController = controller; 
} 
return self; 
} 

В ClassA initWithNibName так:

objB = [[ClassB alloc] initWithNibNameAndParentController:@"..." bundle:nil :self]; 

Теперь из ClassB.м скрыть панель инструментов CLASSA по вашему желанию

[((ClassA*)parentController).toolbar sethidden:yes]; 
+0

спасибо Много за ваш ценный ответ он действительно помог мне решить мою проблему. Ваш ответ правильно объяснил, где я делал ошибку. Большое спасибо снова –

0

В viewDidLoad:

self.navigationController.navigationBarHidden = YES; 
Смежные вопросы