2

我已經(和其他人一樣)已經注意到,蘋果改變了popover控制器的外觀使用「滑塊」窗口,而不是通常的「popover」tableview,我已經使用了。雖然我可以接受新的外觀,與其他人一樣,我有介紹,與輕掃手勢的問題:UISplitViewController的iOS 5.1及以下的UIPopoverController手勢處理

iOS 5.1 swipe gesture hijacked by UISplitViewController - how to avoid?

對此問題進行修復似乎是設置拆分視圖控制器方法「presentWithGesture 「改爲」否「。

UISplitViewController *splitViewController = [[UISplitViewController alloc] init]; 
splitViewController.presentsWithGesture = NO; 

如果用戶使用的是iOS 5.1,但是,如果這個代碼使用的是iOS 5.0或以下運行這個偉大的工程,將拋出一個異常,因爲這種方法只適用於iOS 5.1:

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[UISplitViewController setPresentsWithGesture:]: unrecognized selector 

是否有可能擺脫這種手勢,而不使用此方法,以便它向後兼容iOS 5.0及更低版本?

回答

9

對於任何類型的向後兼容性,檢查新屬性第一的setter方法的存在......

if ([mySplitViewController respondsToSelector:@selector(setPresentsWithGesture:)]) { 
    [mySplitViewController setPresentsWithGesture:NO]; 
} 

注意,顯然你需要在你面前做到這一點UISplitViewController.view添加到你的窗戶。我猜測在那個時候該屬性會被檢查並且手勢識別器被添加或者不被添加。如果您在添加視圖後更改屬性,則不會有明顯的效果。

+4

如果你想在添加視圖後改變屬性,那麼你可以使用下面的代碼:[spv.view setNeedsLayout]; spv.delegate = nil; spv.delegate = self; – daveywc 2012-05-18 09:21:57

+0

謝謝你。你節省了我太多的時間.... – 2013-02-19 08:08:06

+0

是的,我同意加入spv.delegate = nil; spv.delegate = self實際上允許您即時更改行爲。不錯的工作! – Phamer 2013-12-12 17:56:24

相關問題