3

クラス A にはツールバー (プログラムによって作成) とプロパティ (nonatomic,retain) があり、そのツールバーをクラス A のサブビューとして別のクラス B に追加しました。クラス A のツールバーを非表示にしたい

どうやってするか ?使ってるけど動かない?解決策を教えてください。Xcode 4.3.1 を使用しています

クラスBでこのコードを書いています

しかし、それは機能していません

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

[aobj.toolbar sethidden:yes];
4

5 に答える 5

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.mから、希望に応じてClassAツールバーを非表示にします

[((ClassA*)parentController).toolbar sethidden:yes];
于 2012-07-04T15:01:47.050 に答える
1

コードの問題は、新しいインスタンスを作成し、この新しいインスタンスに非表示ClassAを設定しようとするUIToolBarことです。これはどこにも表示されません。

必要なのはClassA、画面に表示されている を指すオブジェクトです。

だから、次のようなことを試してください:

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

そして、あなたのインスタンスを作成するときは、ClassBこれを使用します:

ClassB classb = [[ClassB alloc] initWithClassA:self];

ClassBロードされたときにのみツールバーを非表示にする場合は、 ClassAatの変数を作成し、ClassB.hそれを自分で作成した init-method で提供されるパラメーターに設定できます。

- (id)initWithClassA:(ClassA *)classa {
     if ((self = [super init])) {
          instanceOfClassA = classa; 
     }
     return self;
}
于 2012-07-04T13:21:42.140 に答える
1

extern id context;classA.h に追加してから、 id context;classA.m (グローバル変数が宣言されている @place) を追加し、classAadd context = self;の ViewDidLoad に追加します。次にclassA.hをclassBにインポートし[context.toolbar sethidden:yes];、ここでクラスaのオブジェクトを外部変数として作成しています。これは良い方法ではありません。より良い方法が必要な場合は、classBを作成する方法と場所を説明してください。

于 2012-07-05T08:09:00.323 に答える
0

タブバーのフレームを設定してみてください。画面を超えてフレームを境界に設定するように、コントロールを非表示にします。これがお役に立てば幸いです。

于 2012-07-04T12:17:35.157 に答える
0

ビューでDidLoad:

self.navigationController.navigationBarHidden = YES;
于 2014-07-23T20:18:42.993 に答える