2012-09-30 79 views
2

我有一個在iPhone模擬器上工作得很好的UIActionSheet。它在用戶觸摸UIButton時顯示。Monotouch - UIActionSheet在iPad上無法正確顯示

使用iPad,我相信UIActionSheets被包裝到一個UIPopupController中。

當我使用iPad模擬器調用相同的代碼時,顯示一條細線,看起來像UIPopupController(您可以看到通常指向控件的小箭頭)。沒有任何內容可以被看到。

使用帶有MonoTouch的iPad的UIActionSheet的正確方法是什麼?下面是示例代碼一點我一直在測試 - 創建UIActionSheet:

var actionSheet = new UIActionSheet() { Style = UIActionSheetStyle.BlackTranslucent }; 
     actionSheet.Frame = actionSheetFrame; 
     actionSheet.Clicked += (s, e) => { Console.WriteLine ("Clicked on item {0}", e.ButtonIndex); }; 
actionSheet.AddSubview (doneButton); 

然後,我顯示通過調用按鈕下面的actionsheet:

btnSay.TouchUpInside += (sender, e) => { 
      actionSheet.ShowFrom(tmpBtn.Frame, tmpView, false); 
     }; 

我得到的東西像使用iPad模擬器時附上的截圖。

iPad UIActionSheet example

供參考,在這裏是什麼UIActionSheet看起來使用iPhone模擬器時等。

iPhone UIActionSheet example

注:該項目是一個通用的單一視圖MonoTouch的C#項目。

任何指針或幫助將不勝感激!

+0

當觸摸btnSay時,什麼是tmpBtn.Frame?那麼tmpView呢?我想你想要顯示btnSay.Superview中的btnSay.Frame的actionSheet。 –

+0

嗨雅各布,tmpBtn.Frame是主視圖上按鈕的框架/矩形。 tmpView實質上只是「視圖」,即當前顯示的主視圖。我會給你說的一個嘗試 - 謝謝! – Shogan

+0

嗨,雅各布,抱歉我看到你現在說的 - 早一點衝了一下。是的,現在我已經試圖顯示這樣的actionSheet - 使用3個參數 - 按鈕btnSay.Frame的框架,按鈕的超級視圖,以及true或false動畫或不動畫。像這樣,我得到了上面屏幕截圖中描述的問題。 – Shogan

回答

6

我面對同樣的問題,最近發佈到應用商店的應用程序。

當您在iPad上顯示UIActionSheet時,iOS會將UIActionSheet包裝在UIPopoverView中。

我用下面的代碼來檢測這是否是一個iPad,並且如果它是,調整酥料餅的視圖的幀:

const int CHROMEWIDTHLEFT = 9; 
const int CHROMEWIDTHRIGHT = 8; 
const int MARGIN = 50; 

UIActionSheet _actionSheet; 

... 

if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad) { 
    var popover = _actionSheet.Superview.Superview; 
    if (popover != null) 
    { 
     var x = _actionSheet.Frame.X + MARGIN; 
     var y = (UIScreen.MainScreen.ApplicationFrame.Height - _actionSheet.Frame.Height)/2; 
     var width = _actionSheet.Frame.Width - (MARGIN * 2); 
     var height = _actionSheet.Frame.Height; 

     popover.Frame = new RectangleF (x, y, width, height); 
     _actionSheet.Frame = new RectangleF (x, y, width - (CHROMEWIDTHLEFT + CHROMEWIDTHRIGHT), height - (CHROMEWIDTHLEFT + CHROMEWIDTHRIGHT)); 
    } 
} 

的例子是基於Xamarin ActionSheet日期選取器here

我把這些作爲Gist(正常和DatePicker)

+0

嗨Macropus,感謝您發佈您的解決方案。我明天再試一次並報告。我的問題實際上是修改框架本身 - 所以這看起來很有希望! – Shogan

+0

這是否解決了您的問題? – Darbio

+0

嗨馬格羅斯,很抱歉沒有回到你身邊 - 我有一個快速的嘗試,沒有任何運氣,但認爲在我身邊有什麼過錯 - 我一直在忙着做生意,並計劃試試這個再次 - 可能在週末。只要我有一個更好的外觀,我會盡快回復。 (可能在未來一週)。感謝您檢查。 – Shogan