このところ語る内容がiPhoneアプリネタばかりなのですが。。。
UINavigationViewControllerの下にUIViewControllerが居て、ビューにはUIViewとその下にUITableViewという構成の時。
(もしかしたらUITableViewは関係ないかも…)
デバイスを横向きにしてnavigationBarの「戻る」を押した時にviewが少々崩れ(HTML的に言うとpadding:50px;みたいな)、左右遷移せずに下に落ちて行くという、これまた表現しにくい症状が起きる事があります。
本来、想定している動きとしては右に流れて行く、という。
縦向き時には起きないんですわ、これ。
対策方法は、delegateを指定してあげる事と、各UIViewControllerにshouldAutorotateToInterfaceOrientationでYESを返してあげる事。
前者はなくていいのか?とにかく後者が必須です。
日本語で書かれたページとかないし、英語でもどうやってググったものか…と思ってたら偶然にヒットw
そんなこんなで、もう少しでAppStoreに申請を行います。どんなアプリかはお楽しみに。ニッチな内容です〜
このブログもホームページも構成に思う所があるので、もう少し手が空いたら変更する予定にしています。
もうちょっと更新するようにしなければ〜
よくアラートダイアログ内でパスワードとか入力を求めるのがあるけど、標準ではそんな事出来ないので、中にUITextField仕込んであげましょう、ということで。
C:
-
UIAlertView *alert = [[[UIAlertView alloc] init] autorelease];
-
alert.title = @"編集";
-
alert.message = @"編集してください。\n\n\n";
-
alert.delegate = self;
-
-
UITextField *field = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 70.0, 245.0, 25.0)];
-
[field setBackgroundColor:[UIColor whiteColor]];
-
[alert addSubview:field];
-
-
[alert addButtonWithTitle:@"キャンセル"];
-
[alert addButtonWithTitle:@"実行"];
-
alert.cancelButtonIndex = 0;
-
-
[alert show];
-
-
[field becomeFirstResponder];
-
[field release];
んで、クリック後の処理は…
C:
-
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
-
if (buttonIndex != alertView.cancelButtonIndex) {
-
for (UIView *subView in alertView.subviews) {
-
if ([subView isKindOfClass:[UITextField class]]) {
-
NSString *text = [(UITextField *)subView text];
-
}
-
}
-
}
-
}
UITextFieldが1個しか追加されてない事が前提のテキスト取得方法ですけどね〜
現状の構成がUITabControllerの上にUIViewControllerが3つ載ってて、うち2つがUINavigationControllerでかつUITableViewという感じになってます。
Appleのガイドラインに引っかかってしまわないかと戦々恐々ではあるんですが、上手い事行ったらそこら辺のTipsも出していければ。
さ〜申請はいつになるかな〜
C:
-
NSError *err;
-
NSString *path = [[NSBundle mainBundle] pathForResource:@"hoge.json" ofType:nil];
-
NSString *data = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&err];
-
-
arrHoge = [data JSONValue];
pathForResourceに拡張子を含めちゃえば、ofTypeはnilで大丈夫。
ただし.jsonはデフォルトではバンドルリソースに含まれないので、
ターゲット→アプリ名→バンドルリソースをコピー
にファイルを持って行っておく必要がある。