2012-09-30 2 views
2

iPhone 시뮬레이터에서 잘 작동하는 UIActionSheet가 있습니다. 사용자가 UIButton을 터치하면 표시됩니다.Monotouch - UIActionSheet가 iPad에서 올바르게 표시되지 않습니다.

iPad를 사용하면 UIActionSheets가 UIPopupController에 래핑됩니다.

iPad 시뮬레이터를 사용하여 동일한 코드를 호출하면 UIPopupController처럼 보이는 얇은 "선"이 표시됩니다 (일반적으로 컨트롤을 가리키는 작은 화살표를 볼 수 있음). 어떤 내용도 볼 수 없습니다.

iPad를 MonoTouch와 함께 사용하여 UIActionSheet를 사용하는 올바른 방법은 무엇입니까? 여기에 내가 함께 테스트 된 샘플 코드의 비트합니다 - UIActionSheet를 만드는 :

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

내가 좋아하는 뭔가를 얻을 : 다음

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을 표시하고 iPad 시뮬레이터를 사용할 때 첨부 된 스크린 샷.

iPad UIActionSheet example

는 참고로, 여기에 UIActionSheet 아이폰 시뮬레이터를 사용할 때 모습입니다.

iPhone UIActionSheet example

참고 :이 프로젝트는 보편적 인 단일보기 MonoTouch C# 프로젝트입니다.

모든 포인터 또는 도움을 많이 주시면 감사하겠습니다!

+0

btnSay를 건드릴 때, tmpBtn.Frame은 무엇인가? tmpView는 어떻습니까? 나는 btnSay.Frame 내부에서 btnSay.Frame으로 actionSheet를 보여주고 싶습니다. –

+0

안녕하세요 제이콥, tmpBtn.Frame은 기본보기에서 버튼의 프레임/사각형입니다. tmpView는 본질적으로 '보기'즉 현재 보여지는 기본보기입니다. 나는 네가 한 말을 해줄거야. 고마워. – Shogan

+0

안녕하세요 제이콥, 네가 지금하고있는 말을보고 미안해. 조금 일찍 돌진했다. 예, 그 상태에서 이미 ActionScript 3 x 매개 변수를 사용하여 actionSheet를 표시하려고합니다. 버튼의 프레임 btnSay.Frame, 버튼의 수퍼 뷰 및 애니메이션/애니메이션의 true/false입니다. 이와 같이 위의 스크린 샷에 설명 된대로 문제가 발생합니다. – Shogan

답변

6

앱 스토어에 출시 한 최근 앱에서 이와 동일한 문제가 발생했습니다.

iPad에 UIActionSheet을 표시하면 iOS는 UIPopoverViewUIActionSheet을 래핑합니다.

나는이 아이 패드인지 여부를 감지하려면 다음 코드를 사용하고 있는지의 팝 오버보기의 프레임을 조정합니다

예는 자 마린 ActionSheet의 날짜 선택에 기초
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)); 
    } 
} 

here

나는 이것들을 Gist (보통과 DatePicker)으로 붙였다.

+0

안녕 Macropus, 솔루션을 게시 주셔서 감사합니다. 나는 이것을 내일 시도하고 다시보고 할 것이다. 내 문제는 실제로 프레임 자체를 수정하는 것이므로 - 유망 해 보입니다! – Shogan

+0

이게 문제를 해결 했습니까? – Darbio

+0

안녕 Macropus, 이것에 관해서 당신에게 되돌아 가지 않으면 서 유감스럽게 생각한다 - 나는 빠른 시도를 가지고 있었다, 어떤 운도 가지지 않고 있었다. 그러나 나의쪽에 결함이있는 무엇인가 생각한다 - 나는 비즈니스에서 갑자기 들어 올려졌고, 이것을 시험해 볼 예정이다 다시 - 아마도 주말에. 나는 더 나은 모습을 보자 마자 여기에 다시 올릴거야! (아마 다음 주에 걸쳐). 다시 확인해 주셔서 감사합니다. – Shogan

관련 문제