1

アプリはビューベースのプロジェクト タイプです。View XIB(UIView Nib) で NSObject を使用しています。このオブジェクトがアプリのトップバーであると想定しています。

MainController UIViewController は初期画面を読み込みます。このように見えます。

UIViewController MainViewController イメージ

トップビュー(新しいもの、Xと呼びます)をロードしたかったのですが、上の画像のトップバービュー(赤い色)で個別に設計されています。

現在、「X」内に存在し、すべてのイベントをバインドし、シングルトンオブジェクトである X を完全に制御できる NSObject があります。

NSObject クラスには、自己オブジェクト インスタンスとそれが制御する 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") であり、メイン ビュー コントローラーの topbarview (上の画像の赤い部分) に含まれている必要があります。

私はメインView Controllerにメソッドを次のように書きました:

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

-(void)SetHomeScreenappdelegate.applicationdidfinishlaunching で呼び出します[viewcontroller SetHomeScreen]

これは実際には NSObject(TopBarObject クラス) の対応するメソッドを呼び出しますが、(mainviewcontroller.topbarview) で更新されたビューは表示されません。これが今の本題です。

画像とアイコンを含むカスタム トップ バーとカスタム ボトム バーがあります。ということで、このデザインを選びました。これが最善の方法かどうかはわかりませんが、この作業を効率化するための最適なシステム設計を探しているだけです。これよりもはるかに優れた方法が他にあると思われる場合は、私と共有してください。

4

2 に答える 2

0

シングルトンが間違っていることがわかりました。次のようになります。

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

あなたのコードでは、topBarObject は開始されないため、GetTopBarObject が呼び出されるたびに、新しい TopBarObject が生成されて返されます...

于 2010-01-25T00:26:26.310 に答える
0

appdelegate.applicationdidfinishlaunching のどこで呼び出されますか?
ビューが実際にセットアップされる前に呼び出す場合は、何かで nil を設定するだけです。 前に
試してみる viewcontroller.view;[viewcontroller SetHomeScreen]

于 2010-01-25T01:49:56.363 に答える