iPadアプリのメイン画面の上部にUIToolbarがあります。それには6つのUIBarButtonItemがあります。これらのアイテムのうち4つがUIPopOversをトリガします。他の2つのアイテムは、別のビューに切り替えるか、または現在のビューについて何かを変更します。iOS - PopOverプレゼンテーションと解雇
タップされたUIBarButtonItemから4つのUIPopoverが表示されますが、4番目の矢印は画面の中央に矢印が表示されません。
私は、次の機能をしたいと思いますが、難易度それになったのです。何UIPopOversが表示されず、ユーザーがUIPopOverを生成UIBarButtonItemsのいずれかをタップ、UIPopOver(非常にシンプルことを示しているとき
- を。これが動作しています。)
- UIPopOverが表示され、ユーザーがUIToolbarをタップすると、そのUIPopOverを閉じます。 (1タップかかるUIGestureRecognizerを使用しています)
- UIPopOverが表示され、ユーザーがUIPopOverが「TIED」になるまでUIBarButtonItemをタップすると、UIPopOverが閉じられます。
- UIPopOverが表示され、ユーザーが別のUIBarButtonItemをタップすると、現在のUIPopOverを却下し、適切な新しいUIPopOverを表示します。 (これは問題ありません)
私が直面している問題は、ボタンタップの前にUIGestureRecognizerが起動することです。また、ユーザーがUIBarButtonItemを押しているときに、UIGestureRecognizerを「オプトアウト」する良い方法を見つけることができません(したがって、UIToolbar自体がタップされたときにUIGestureRecognizerのアクションが発生するだけで、UIBarButtonItemは発生しません)。この結果、UIPopOverが(UIBarButtonItemから)表示され、ユーザーが同じUIBarButtonItemをタップすると、UIPopOverは終了し、再び表示されます。
私は、「toolbarTapped」フラグを0.10秒間YESに設定し、NO(またはそのようなもの)に戻すようなタイミングの問題を回避しようとしています。
私は真にこれをエレガントに(そしてハックインではなく)行う方法を見つけたいと思います。
UIGestureRecognizerが最初に起動し、フレームを取得するための良い(非プライベート)方法ではないように見えるので、UIBestureRecognizerがUIBarButtonItemタッチに基づいてトリガされたタイミングを判断する方法が見つからないようです。 UIBarButtonItemの
基本的には、私はUIToolbarとそのUIBarButtonItemsを、合理的な人が期待する方法で動作させるようにしようとしていますが、壁に頭を打つのです。
ここUIGestureRecognizerのためのコードです:このすべての正味の効果は、Iのいずれかを選択することができるということです
- (IBAction)showSettings:(id)sender {
NSLog(@"settings button tapped");
if (![self SettingsPopOver]) {
SettingsViewController *settingsVC = [[SettingsViewController alloc] initWithNibName:@"SettingsView-iPad" bundle:nil];
UIPopoverController *popOver = [[UIPopoverController alloc] initWithContentViewController:settingsVC];
[popOver setDelegate:self];
[self setSettingsPopOver:popOver];
[[self SettingsPopOver] setPopoverContentSize:CGSizeMake(320, 300)];
[[self SettingsPopOver] presentPopoverFromBarButtonItem:[self Settings] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
}
:
// Initialization
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeAllPopOvers)];
[tapRecognizer setCancelsTouchesInView:NO];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setNumberOfTouchesRequired:1];
[[self Toolbar] addGestureRecognizer:tapRecognizer];
// Tap handler
- (void)removeAllPopOvers {
NSLog(@"removing all popovers");
if ([self firstPopOver]) {
[[self firstPopOver] dismissPopoverAnimated:YES];
[self setFirstPopOver:nil];
}
// and so on with the rest...
}
そしてここでは、どのように私UIPopOversのいずれかが表示されます次の2つのオプションに従ってください(両方ではありません)。
- UIBarButtonItemがUIPopOverを閉じることを許可します。
- UIToolbarをタップしてUIPopOverを閉じることができます。
ありがとうございます!
いいえ、ユーザーが画面のどこかに触れるたびにいつものように自動的に解除します。最初の問題は、 "生成"ボタンをタップしてもPopOver(私が修正したもの)を却下しないということでしたが、UIToolbarをタップしても解消できませんでした(私は理解できませんでした。 – mbm29414
また、ユーザーがUIToolbarをタップしたときにPopOversを終了するための「修正」を実装するまで、問題3を実行しました。 – mbm29414
ボタンが入っているツールバーをタップすると、私のpopoverは却下しません。 – Padin215