MonoTouch для iPad: как показать всплывающее диалоговое окно? - PullRequest
4 голосов
/ 29 октября 2011

Я только начал изучать разработку приложения (в первую очередь) для iPad с использованием MonoTouch. Может быть, из-за моего многолетнего опыта работы в мире C # это делает мой переход очень трудным, и я иногда чувствую себя глупо. Это очень простая вещь в C #, но она заставляет меня чесать голову ...

Всплывающее диалоговое окно?

Для iPhone у вас редко есть это требование, потому что все, что вы показываете, займет весь экран, поэтому вы просто создаете контроллер для каждого всплывающего окна.

Для iPad у меня гораздо больше места, и я не хочу, чтобы весь экран занимал несколько элементов управления (например, экран входа в систему). Вот почему я хочу показать это как всплывающее окно. Я видел это в других приложениях для iPad.

Из того, что я узнал, мне нужно использовать UIAlertView или UIActionSheet, чтобы сделать это. Но что я не понимаю, так это то, что, как показывают все примеры, которые я прочитал, вы должны создать все элементы управления из кода.

Я хотел бы создать пользовательский интерфейс с использованием IB и подключить его к UIActionSheet. Является ли это возможным? Как мне это сделать?

Ответы [ 3 ]

6 голосов
/ 29 октября 2011

Если это приложение для iPad, вам нужно использовать UIPopoverController.Это всплывающее «окно», которое содержит представление и связано с областью на экране, такой как кнопка панели инструментов или прямоугольник (например, рамка UIButton).

Чтобы использовать это, создайтеновый экземпляр UIPopoverController, использующий конструктор, который принимает UIViewController и передает представление, которое вы хотите показать.

Из-за соображений сбора мусора убедитесь, что вы храните UIPopoverController в свойстве уровня класса.

Возможно, вы также захотите очистить это свойство, когда всплывающее окно закрыто.Для поддержки этого мы подклассифицировали UIPopoverController, добавили событие, которое может быть перехвачено вызывающей стороной, затем переопределили метод Dismiss и запустили перехваченное событие, если оно есть, в переопределенном методе.

Как только вы создадите экземпляр popover, вы захотите показать это.Вы можете сделать это с помощью одного из методов PresentFromxxx.Если вы представляете это из кнопки (не из панели инструментов), вы можете вызвать PresentFromRect, используя рамку кнопки в качестве прямоугольника.

Представление, которое представлено, может управлять его размером, установив свойство ContentSizeForViewInPopover в его методе ViewDidLoad.

1 голос
/ 29 октября 2011

Вы не можете редактировать UIActionSheet или UIAlertView из Интерфейсного Разработчика.

Что вы можете сделать, это создать представление в Интерфейсном Разработчике и отобразить его модально поверх других ваших представлений, однако это звучит так, будто вы не хотите занимать весь экран, и это то, что произойдет. Вот пример модального контроллера представления: http://pastebin.com/h221BQdK

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

0 голосов
/ 04 сентября 2013

Создайте viewcontroller с именем extraviewcontroller, установите его ширину высоты 300 * 215. и напишите код ниже

inviewdidload

pickerviewTitle = [[UIPickerView alloc] initWithFrame:CGRectMake(0,0, 383, 250)];
pickerviewTitle.delegate = self;
pickerviewTitle.tag = 0;
pickerviewTitle.showsSelectionIndicator = YES;

controller = [self.storyboard instantiateViewControllerWithIdentifier:@"ExtraViewController"];
popovercontroller = [[UIPopoverController alloc] initWithContentViewController:controller];
popovercontroller.delegate = self;

тогда

UIActionSheet *actionSheet1 = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Done" destructiveButtonTitle:nil otherButtonTitles:nil];
actionSheet1.tag = 0;
actionSheet1.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet1 addSubview:pickerviewTitle];
[actionSheet1 setFrame:CGRectMake(0, 0, 600, 400)];

[controller.view addSubview:actionSheet1];


if ([popovercontroller isPopoverVisible]) {
    [popovercontroller dismissPopoverAnimated:YES];
} else {

    //the rectangle here is the frame of the object that presents the popover,
    //in this case, the UIButton…

    CGRect convertedFrame = yourclickbutton.frame;


    [popovercontroller presentPopoverFromRect:convertedFrame
                                       inView:self.view
                     permittedArrowDirections:UIPopoverArrowDirectionRight
                                     animated:YES];

}
...