3

私は以前ここで多くの人が経験した問題に悩まされていますが、新しいiOSリリースが登場し、APIが変更されると、その解決策は時間とともに変化します。以前のソリューションはどれも私の現在のセットアップでは機能しません-XCode4.2.1、iPhoneシミュレーター5.0または実際のiPhone 5.0、ア​​プリはARCとストーリーボードを使用してiOS5をターゲットにしています。

私は古典的なタブ付きアプリ、つまりUITabBarControllerを持っています。その中には4つのタブがあります... 2番目から4番目のタブは無視してください。最初のタブはUINavigationControllerをホストし、そのrootviewcontrollerはUITableViewControllerです。今、私は1つのCustomUIViewControllerをスタックにプッシュしています。

セットアップ全体はストーリーボードで視覚的に設計されており、プッシュはセグエによって行われます。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    self.hidesBottomBarWhenPushed = YES;
}

これにより、iPodアプリがiPhoneで行うのとまったく同じ方法で、タブバーが効果的に非表示になります。

しかし、スタックからCustomUIViewControllerをポップすると、TabBarが返されません。私は入れていた

self.hidesBottomBarWhenPushed = NO;

すべての可能性と不可能な場所に、しかし運がない。

TabBarを元に戻すにはどうすればよいですか?

4

4 に答える 4

7

これは要約された答えであり、将来の読者にクリーンで読みやすい解決策を提供し、いくつかの関連する問題を明示的に定式化します。


この問題の解決策は次のコードです>

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [segue.destinationViewController setHidesBottomBarWhenPushed:YES];
}

問題/混乱は、prepareForSegue:メソッドで、ソースビューコントローラー(現在表示されているもの)または宛先ビューコントローラー(現在表示されているもの)でプロパティ"hidesBottomBarWhenPushed"を設定できることにあります。スタックにプッシュされています)。これをいずれかの方法で設定することにより、問題の前半を解決できます。TabBarが非表示になります。これが、以前のコードの「非表示」部分が機能した理由です。ソースビューコントローラーでプロパティを設定していました。私のコードでは

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    self.hidesBottomBarWhenPushed = YES;
}

ここで、「self」は、destionationビューコントローラではなく、ソースビューコントローラを指します。したがって、これを宛先のViewControllerに設定する必要があります...

最後の1つの問題..ドット表記のこのコードは機能しません>

segue.destinationViewController.setHidesBottomBarWhenPushed = YES;

このようにsetterメソッドをmut呼び出します

[segue.destinationViewController setHidesBottomBarWhenPushed:YES];

解決策はAppleの仕様に正確に準拠しており、「View Controller (hideプロパティがYESに設定されている)がスタックからポップされるまで、下部のバーは非表示のままです」と述べています。

最後に、hideプロパティの設定を特定のセグエに絞り込むことを忘れないでください

-(void)prepareForSegue:(UIStoryboardSegue *)segue 
                sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"SegueIdentifier"]) 
    {
        [segue.destinationViewController setHidesBottomBarWhenPushed:YES];
    }
}

私は2人のユーザー(報奨金はAsh Furrowに行き、Eric Lars0nの解決策を受け入れました。これは、報奨金と受け入れに関するルールを読んだ後、私が得ることができる最も近いものです)の報酬を分割しています。彼らの尊敬されるスレッドで。

于 2012-01-02T20:45:52.290 に答える
5

設定する必要があると思います

segue.destinationViewController.hidesBottomBarWhenPushed = YES;

self.hidesの代わりに...

于 2011-12-19T01:13:58.237 に答える
4

Appleによれば、「View Controllerがスタックからポップされるまで、下部のバーは非表示のままです」。ナビゲーション階層の上位にあるViewControllerにポップしない限り、下部のバーを「再表示」する方法はありません。

hiddensBottomBarWhenPushedプロパティを含まない他の回避策を考え出す必要があります。別のSOの質問で、これを達成する方法についての適切な説明があります。

于 2012-01-02T15:20:21.083 に答える
1

入れるだけ[segue.destinationViewController setHidesBottomBarWhenPushed:YES];prepareForSegue

私にとってはうまくいきます。

于 2012-03-30T21:55:29.280 に答える