2011-02-01 12 views
5

私はそれについてたくさん読んでいます。人々は、その親が自動回転するように設定されていないときに自動回転しないと言う。私はすべてを試みましたが、運はありませんでした。iPhone UIActionSheetが自動回転しない

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel Button" destructiveButtonTitle:@"Destructive Button" otherButtonTitles:@"Other Button 1", nil]; 
    actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
    [actionSheet showInView:self.view]; 

がルートコントローラを自動回転するように設定されている: 私はこれを実行するボタンとビューベースのアプリケーション(V4.2)を作成しました。 actionSheetはそうではありません。シミュレータを回転させると、ルートコントローラの方向付け方法のどれも呼び出されないことに注意してください。デリゲートに問題はありますか?なにが問題ですか?

+0

「showInTabbar」または「showFromBarButtonItem」を使用してください。 'showInView'は時々ちょっと愚かです。 –

+0

いいえ...同じで回転しません。 – xpepermint

+0

この問題の解決策を見つけましたか?私は同じ問題に直面しています。 –

答えて

6

さて、ここでは、この問題に対する私のソリューションです:

基本的に私たちが何をすべきかは、次のとおりです。

  1. が回転イベントを聴きます。
  2. イベントをクリックするとリッスンします。
  3. actionSheetを終了し、回転が完了したら再度提示します。 (我々はそれが取るようにするための小さな遅延を待つ必要が

例えば:。

@interface ViewController() 
{ 
    UIActionSheet *_sheet; 
    BOOL _isClicked; 
} 
@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil]; 
} 

- (IBAction)click:(id)sender 
{ 
    _isClicked = YES; 

    [self showActionSheet]; 
} 

- (void)didRotate:(NSNotification *)note 
{ 
    [_sheet dismissWithClickedButtonIndex:1 animated:YES]; 
    [self performSelector:@selector(showActionSheet) withObject:nil afterDelay:1.0]; 
} 

- (void)showActionSheet 
{ 
    if (!_isClicked) return; 

    _sheet = [[UIActionSheet alloc] initWithTitle:@"title" delegate:self cancelButtonTitle:@"cancel" destructiveButtonTitle:@"new" otherButtonTitles:@"bla", nil]; 
    [_sheet showInView:self.view]; 
} 
+1

本当にありがとうございます! – jin

+0

フェイスアップとフェイスダウンのデバイスの向きはどうですか? –

1

私は、デリゲートにアクションシートを提示したときに私はこの問題に実行していたことがわかりました(私がナビゲーションコントローラを使用してプッシュした)従属ビューからの問題です。私のビューは現在のものではなく、従業員ビューはまだ私がアクションシートを表示しようとしていた時点にあります。

私のコードをちょっと変えて、デリゲートメソッドがインタラクションを書き留めました。このビューのviewDidAppearメソッドにアクションシートのプレゼンテーションを延期すると、論理インターフェイスのアニメーションの適切なタイミングでシートが表示され、自動回転の問題が解消されました。それがあなたに役立つかどうかを知りたいかもしれません。言い換えれば

、流れになった:選択肢を報告するデリゲートメソッド出るときに作られたユーザーと呼ば

  • 従属ビュー。
  • 親ビューでこの情報を後で記録しました。
  • ナビゲーションコントローラが従属ビューをポップアウトするよう指示されました。
  • 親ビューのviewDidLoad:メソッドが、デリゲートメソッドで作成されたメモを検出しました。
  • アクションシートが提示されました。回転が正しいようになりました。
関連する問題