引っ越しました。

このブログは引っ越しました。
今後は引越し先で更新を続けます。
新しいブログではソースコードにシンタックスカラーを付けているので見やすくなっていると思います。

こちらは数ヶ月後に削除しますのでよろしくお願いします。

2010年7月12日月曜日

モーダルビューを表示した時に前のビューのツールバー、ナビゲーションバーが残る時の対処法

タイトル通りの症状。
この症状が出た人は恐らく下のソースと似たようなソースになってるんじゃないかと。
自分はTestViewClassでモーダルを呼び出したときにこの症状が出ました。

AppliNameAppDelegate.h
@interface AppliNameAppDelegate : NSObject  {
 UIWindow* window_;
 TestViewClass *testClass;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end
AppliNameAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

 // windowを自分で作成
 CGRect bounds = [[UIScreen mainScreen] bounds];
 window_ = [[UIWindow alloc] initWithFrame:bounds];

 testClass = [[[TestViewClass alloc]init]autorelease];
 
 UINavigationController *NavigationController =
  [[UINavigationController alloc] initWithRootViewController:testClass] ;
 
 [window_ addSubview:NavigationController.view];
 [window_ makeKeyAndVisible];
 
 return YES;
}

対処としてはAppliNameAppDelegate.mの下記の部分で
UINavigationController *NavigationController =
[[[UINavigationController alloc] initWithRootViewController:paging] autorelease];
NavigationControllerをautoreleaseしていたらこれを消してやる。
んでUINavigationControllerは.mじゃなく.hの方で宣言しておく。
deallocでreleaseするの忘れずにね。
これで新しくモーダルビューを表示した時にもちゃんとツールバーやナビゲーションバーが表示されるみたい。

TestViewClass上(呼び出した先)でモーダルを表示するとNavigationControllerのautoreleaseが動いて上手く処理されないのかも。

※追記
他の場所で同じような現象が起きたので例のごとく総当りでautorelease, release関係消してみたけど駄目でした。
今回の現象が起きたところは元々処理のさせ方が無理矢理だったからそれが原因なのかもしれないのですが。
とりあえずこの問題解決の糸口はrelease関係じゃないのかもしれません。
…という投げっぱなしな記事。

0 件のコメント:

コメントを投稿