頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


iOS 6にしたらボタンが効かなくなった

iOS 6だとなぜかボタンやジェスチャーが機能しなくなったってお話だよ。

「赤ちゃんの成長グラフ」ってアプリをリリースしてるんだけど、iOS 6にするとデータを入力するページのある部分のボタンが動かなくなったんだ。

入力画面

↑この画面はUITableViewでテーブルを表示しているところ。このテーブルをぐぐぐーっと下へ引っ張ると、、、

入力画面を下に引っ張ったところ

↑隠れていたビューが表示されるんだ。ここにそうそう頻繁には使わないボタンを用意してるんだよ。テーブルをもう一度下に引っ張って指を離すかテーブルを上へドラッグすると元に戻って隠れるようになっている。
隠されてるviewはUITableViewオブジェクトのbackgroundViewプロパティに入れてるよ。
「赤ちゃんの成長グラフLite」って無料版もあるからどんな動作してるのか確認したい方はダウンロードしてみてね。

この隠れているボタン全部と隠れずに見えていた月の切り替えボタンがiOS 6にアップデートした後、反応しなくなったんだよ(一番上の左右にあるボタンはscrollViewと関係ないからか普通に動く)。あと、テーブルを左右にスワイプで月を切り替えられるんだけど、それも同じで反応しなくなったんだ(隠れているビューを表示している時だけ)。

こりゃiOS 6の不具合だな、そのウチ治るだろうってほったらかしにしておきたいところだけど、自分が買いたコードを見るとまあなんともひねくれた(?)書き方をしててさ。素直じゃないのかもしれない。
こりゃ対策しないとなあ、と単純なコードで確認したらいとも簡単に再現するんだよね。

こんな感じでUIScrollViewDelegateの各メソッドで処理してるんだ(loadView内でUIScrollViewオブジェクトの上にボタンを追加してるけど略)。
#define HEIGHT_TABLE_TOP 44.f

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    //ドラッグ終了時に引っぱりだしていたら表示/非表示の切替
    if (scrollView.contentOffset.y < -HEIGHT_TABLE_TOP) {
        isShow = !isShow;
    }
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    //戻らせないための処理
    if ( (isShow)&&(scrollView.contentOffset.y > -HEIGHT_TABLE_TOP) ) {
        [scrollView setContentOffset:CGPointMake(0.0f, -HEIGHT_TABLE_TOP) animated:NO];
    }
}
これは単純化したコードなので本当はもうちょっと複雑だけど引っ張りだして隠れているビューが見えるようにscrollViewを固定する、という点では同じなんだよ。まあやや強引かな。 こんな感じでscrollViewを止めていると、それに関わるイベントが伝えられないのか?これは困ったぞ。

<< AdMobが原因でビルドできない   TopPage  iOS 6もXcode 4.5もやって来た! >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/660-fdec2ae8




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad