UIActionsheet в сбое Splitview с обновлением iOS 5.1 - PullRequest
4 голосов
/ 15 марта 2012

После обновления до iOS 5.1 с 5.0, лист действий, представленный с помощью кнопки во всплывающем окне контроллера splitview, приводит к сбою приложения. Ошибка его вывода: * Ошибка подтверждения в - [UIActionSheet presentSheetInPopoverView:], /SourceCache/UIKit/UIKit-1914.84/UIActionSheet.m:1816 Таким образом, в главном представлении контроллера Splitview у меня есть кнопка камеры, на которой я пытаюсь представить лист действий с просьбой выбрать ее с рулона камеры или с камеры. Есть идеи?

if(lpm != null)  //Long Press Menu / Action Sheet
    lpm = null;
lpm = new UIActionSheet("Select an action to perform on " + Application.MO.CurrentList[indexPath.Row].Name);
foreach(var button in buttonList)
    lpm.AddButton(button);
lpm.CancelButtonIndex = buttonList.Count - 1;
lpm.Style = UIActionSheetStyle.BlackTranslucent;                
lpm.ShowFrom(theList.RectForRowAtIndexPath(indexPath), this.View, true);
lpm.Clicked += delegate(object sender, UIButtonEventArgs e2) {
                    lpm.DismissWithClickedButtonIndex(e2.ButtonIndex, false);
                            Application.MO.RespondToLongPressSelection(e2.ButtonIndex);
                        };

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

Я столкнулся с той же проблемой и исправил ее, показав в главном окне. Попытка показать его из любого другого вида или прямоугольника, находящегося рядом с нажатой кнопкой, вызывает тот же сбой. Ниже приведен код для отображения в середине экрана только в портретном режиме:

    if (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation))
        [sortSheet showInView:self.view.window];
    else
        [sortSheet showFromBarButtonItem:sender animated:YES]; // rightBarButton

Уже зарегистрировано несколько ошибок радара . Но, пожалуйста, подайте новый, чтобы они знали, что это происходит со всеми.

Если вы не находитесь в контроллере представления, используйте: [UIApplication sharedApplication] .keyWindow, чтобы получить главное окно для отображения представления.

1 голос
/ 21 марта 2012

Это потенциальный обходной путь, он заставляет меня создать совершенно отдельный поповер и вставить в него свой UIActionSheet, который удобно добавляет действительно крутой эффект вставки:

var buttonList = Application.MO.LoadLongPressOptions(false);
if(lpm != null)
lpm = null;
if(longpresspopover != null)
{
    longpresspopover.Dismiss(false);
    longpresspopover = null;
}
longpresspopovercontroller = new UIViewController();
                    longpresspopovercontroller.View.BackgroundColor = UIColor.Black;
longpresspopover = new UIPopoverController(longpresspopovercontroller);
                    longpresspopover.PresentFromRect(theList.Frame, this.View,UIPopoverArrowDirection.Any, true);
                    lpm = new UIActionSheet("Select an action to perform:");
                    foreach(var button in buttonList)
                        lpm.AddButton(button);
                    lpm.CancelButtonIndex = buttonList.Count - 1;
                    lpm.Style = UIActionSheetStyle.BlackTranslucent;
                    lpm.ShowInView(longpresspopovercontroller.View);
                    longpresspopover.SetPopoverContentSize(lpm.Frame.Size, false);
                    lpm.Clicked += delegate(object sender, UIButtonEventArgs e2) {
                            lpm.DismissWithClickedButtonIndex(e2.ButtonIndex, false);
                            longpresspopover.Dismiss(true);
                            Application.MO.RespondToLongPressSelection(e2.ButtonIndex);
                        };
...