4

「ウィンドウ ベースのアプリケーション」テンプレートに基づいており、サブビューが埋め込まれたメイン ビューを使用する iPhone アプリケーションがあります。

一部のアクションでは、ユーザーによる確認が必要です。したがって、UIActionSheet を作成し、ユーザーにフィードバックを求めます。

問題は、アクション シートがまったく表示されないことです。代わりに、画面が暗くなります。シートと要求されたボタンが表示されません。その後、アプリケーションがハングします。画面が暗くなるのは、通常アクション シートを表示するアニメーションの一部としての正常な動作です。

不思議なことに、viewDidLoad メソッドで呼び出された場合、同じコードが正常に機能します。確認が必要なアクションを開始する buttonPressed メソッドで呼び出された場合は機能しません。

- (void) trashButtonPressed {
   // This method is called in the button handler and (for testing
   // purposes) in the viewDidLoad method.
   NSLog( @"trashButtonPressed" );

   UIActionSheet* actionSheet =
        [[UIActionSheet alloc] initWithTitle: @"Test" 
                                    delegate: self 
                           cancelButtonTitle: @"Cancel"
                      destructiveButtonTitle: @"Delete Sheet"
                           otherButtonTitles: nil];

   [actionSheet showInView: self.view];
   [actionSheet release];
}

- (void)       willPresentActionSheet:(UIActionSheet *)  actionSheet {
   NSLog( @"willPresentActionSheet" );
}

- (void)       didPresentActionSheet:(UIActionSheet *)   actionSheet {
   NSLog( @"didPresentActionSheet" );
}

- (void)        actionSheet:(UIActionSheet *)actionSheet
  didDismissWithButtonIndex:(NSInteger)buttonIndex {
   NSLog( @"actionSheet:didDismissWithButtonIndex" );
}

ご覧のとおり、UIActionSheetDelegateProtocol のプロトコル ハンドラーにいくつかのログ メッセージを追加しました。"will present" および "did present" メソッドは期待どおりに呼び出されますが、シートは表示されません。

ここで何が問題なのか、誰か知っていますか?

4

2 に答える 2

3

[actionSheet showInView: self.view];actionSheet自体をself.viewで保持するのに十分かどうか疑問に思います。編集:カウントジャンプを1から4に保持するので、ここでは問題ありません)

ビューの寸法を確認しましたか?シートはビュー内に配置されますが、self.viewが大きなスクロールビューを参照する場合は、表面の下にシートがある可能性があります。つまり、self.view.frameとself.view.boundsが、参照している2つの状況で同じ値を持っていることを確認しますか?それは同じビューですか(NSLog(@"%x",self.view)アドレスを-ingするだけの場合)?

明確にするために編集:

NSLog(@"%f %f %f %f",
        self.view.frame.origin.x,self.view.frame.origin.y,
        self.view.frame.size.width,self.view.frame.size.height);

コンソールに表示されている内容を教えてください。0,0,0,0フレームまたは0,0,320,800フレームのいずれかを設定すると、「画面が暗くなる」ので、これが...

于 2010-08-01T00:46:02.270 に答える
0

実際、私が見たのと同じ問題に遭遇したと思います。

iOS 8 & 9 では、UIActionSheet 表示されます...ああ...しかし、オンスクリーン キーボードの背後にあるため、表示されません。画面の残りの部分が暗くなるだけです。

どうやら、これは Apple の最新の UI 改善のアイデアであり、画面を整然とした状態に保つためのものです。;-)

簡単な解決策は、次のコードを表示する前に 1 行のコードを追加することですUIActionSheet

[self.view endEditing:true];

これにより、オンスクリーン キーボードが閉じられ、美しいアクション シートが再び表示されます。

または、あなたをに置き換える方法をここに文書化しました。UIActionSheetUIAlertController

于 2016-02-11T09:08:17.013 に答える