我有我的iPad應用程序的主屏幕頂部的UIToolbar。它有6個UIBarButtonItems。其中4個項目觸發UIPopOver出現。其他2個項目可以切換到不同的視圖或改變當前視圖的某些內容。iOS版 - 酥料餅的介紹和解僱
4個UIPopOvers 3出現從抽頭的UIBarButtonItem,所述第四顯示而不在屏幕的中間的箭頭。
我想下面的功能,但我有困難得到它:
- 當顯示沒有UIPopOvers和用戶點擊產生一個UIPopOver的UIBarButtonItems之一,表明UIPopOver(非常簡單;得到了這個工作。)
- 當顯示UIPopOver和用戶點擊的UIToolbar,關閉那些UIPopOver。 (使用需要1次點擊的UIGestureRecognizer才能正常工作。)
- 當顯示UIPopOver並且用戶點擊UIPopOver爲「TIED」的UIBarButtonItem時,關閉UIPopOver。 (下面是我的問題。)
- 當顯示UIPopOver和用戶水龍頭的UIBarButtonItem另一個,關閉當前UIPopOver並顯示相應的新的。 (這是工作正常。)
所以,我面臨的問題是,UIGestureRecognizer觸發按鈕水龍頭之前。我還不能找到一個很好的方式向UIGestureRecognizer的「退出」,當用戶按下的UIBarButtonItem(因此,僅燒製UIGestureRecognizer的行動時,UIToolbar本身被竊聽,而不是一個的UIBarButtonItem)。這樣做的最終結果是,當顯示UIPopOver(來自的UIBarButtonItem),和用戶輕敲相同的UIBarButtonItem,所述UIPopOver被駁回,然後重新出現。
我試圖避免某種時間問題,我在0.10秒將「toolbarTapped」標誌設置爲YES,然後將其設置回NO(或類似的東西)。
我想找到一種方法,真正做到這一點優雅(和沒本事-Y)。
我似乎無法找到一種方法來確定自UIGestureRecognizer火災第一,有沒有出現是一個很好的(非私有)的方式來獲得框架基礎上的UIBarButtonItem觸摸時UIGestureRecognizer被觸發的UIBarButtonItem。
基本上,我試圖讓UIToolbar和它的UIBarButtonItems表現出任何合理的人所期望的方式,但是我正在靠着牆壁敲打我的頭。
下面是該UIGestureRecognizer代碼:
// 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之一所示:
- (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];
}
}
這一切的最終結果是,我可以選擇的一個遵循兩個選項(但不是全部):
- 允許的UIBarButtonItem駁回UIPopOver。
- 允許拍打UIToolbar駁回UIPopOver。
任何想法?
謝謝!
沒有,我想它會自動解僱像往常一樣,每當用戶觸摸其他地方在屏幕上。最初的問題是,點擊「生成」按鈕不會消除彈出窗口(我固定),但同時點擊UIToolbar不會解僱(我不明白,但也得到解決)。 – mbm29414 2012-02-24 19:02:36
此外,我有問題#3工作,直到我實施「修復」用戶點擊UIToolbar時解散PopOver。 – mbm29414 2012-02-24 19:04:04
是的,如果我點擊該按鈕所在的工具欄,我的彈出窗口不會消失。 – Padin215 2012-02-24 19:38:42