アプリを実行してアクションシートのボタンをクリックすると、次のように表示されます:
スーパービューで切り取られたアクションシートを提示します。一部のコントロールはタッチに反応しない場合があります。 iPhoneでは、-[UIActionSheet showInView:]の代わりに-[UIActionSheet showFromTabBar:]または-[UIActionSheet showFromToolbar:]を試してください。
どうすれば修正できますか?
これを試してみてください、それは私にとって完璧に機能しました:
[actionSheet showInView:[UIApplication sharedApplication].keyWindow];
[MyActionSheet showInView:super.view];
または、UITabBarまたはUIToolbarがある場合は、それが示唆するように、[MyActionSheet showFromTabBar:self.tabBarController.tabBar];
または[MyActionSheet showFromToolBar:self.toolbar];
このコントローラにはデフォルトで上部ナビゲーションバーがあるため、UINavigationViewController
を使用している場合は、[actionSheet showInView:self.parentViewController.view];
ではなくself.view
を使用するように解決する必要があります。
[sheet showInView:[UIApplication sharedApplication].keyWindow];
sheet.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height-sheet.frame.size.height, [UIScreen mainScreen].bounds.size.width, sheet.frame.size.height);
これで問題が解決するはずです。
私はほぼ同じケースを次の方法で解決しました:
YourAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[actionSheet showFromTabBar:delegate.tabBarController.tabBar];
最初に、TabBarController xCodeテンプレートを使用するとします。
Heres Swift version:
actionSheet.showInView(UIApplication.sharedApplication().keyWindow)
ツールバーはナビゲーションコントローラの一部である場合があることに注意してください。 self.navigationController.toolbar
でアクセスできます
上記の答えをすべて試しましたが、役に立ちませんでした。最終的には、アクションシートのアイテムの数を減らすことが唯一の解決策であることがわかりました。
UIPageViewController-> UINavigationViewController-> TableViewController構造で私のために働いた別の同様のソリューションは次のとおりです:
[actionSheet showInView:self.view.superview];
これを使って:
[actionSheet showInView:self.view.window];
これにより、アクションシートがナビゲーションバーの上に表示され、すべてのタップに応答します。ただし、一部の左/右スライドメニューライブラリを使用すると、actionSheetが画面の外に表示される場合があります。ただテストして...