Xcode: как создать контроллер просмотра PopUp, который появляется в другом представлении контроллера

В основном, что я пытаюсь понять, скажем, у меня есть один View Controller, называемый V1, который имеет регулярный вид внутри него и кнопку. Теперь, когда вы нажимаете эту кнопку, я хочу, чтобы эта кнопка создала действие, которое всплывает над другим контроллером View, называемым V2, в пределах одного контроллера вида V1.

V2 будет уменьшен по размеру, чтобы он не заполнил весь экран, но вы все еще можете видеть первый слой, который является V1 за V2. Поэтому в принципе вы никогда не покидаете V1. Надеюсь, это имеет смысл для того, что я пытаюсь сделать. Я знаю, что приложение MTV имеет эту функцию. Изображение того, о чем я говорю, здесь: https://docs.google.com/leaf?id=0BzlCAVXRsIPcNWUxODM2MDAtNDE3OS00ZTc4LTk5N2MtZDA3NjFlM2IzNmZk&hl=en_US

Пример кода или примера - это то, что я ищу.

Спасибо

Ответ 1

Вы можете создать такой вид, установив соответствующий тип свойства modalPresentationStyle. См. Мой пример ниже:

UIViewController *V2 = [[UIViewController alloc] init];
V2.modalPresentationStyle = UIModalPresentationFormSheet;
V2.modalTransitionStyle = UIModalTransitionStyleCoverVertical;     
[V1 presentViewController:V2 animated:YES completion:nil];
V2.view.superview.frame = CGRectMake(0, 0, 540, 620); //it important to do this after presentModalViewController
V2.view.superview.center = V1.view.center;
[V1 release];

Ответ 2

Попробуйте следующее:

V2 *d = [[V2 alloc]initWithNibName:@"V2" bundle:nil];//assuming V2 is name of your nib as well
d.delegate = self; //Optional:you only need this if you want to delegate

 //create popover and put V2 in the popover view
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:d]; 
popoverController.delegate = self;  //optional
CGSize size = CGSizeMake(325, 75); // size of view in popover…V2
popoverController.popoverContentSize = size;
[d release];
[popoverController presentPopoverFromRect:yourButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

Ответ 3

Если вы хотите представить это как модальное всплывающее окно в iOS 8 с похожим стилем на экранный снимок OP, вот что я сделал:

UIViewController *V2 = [[UIViewController alloc] init];  // V2 is the popup
V2.modalPresentationStyle = UIModalPresentationFormSheet;
V2.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
V2.preferredContentSize = CGSizeMake(325, 75); // size of popup view
[V1 presentModalViewController:V2 animated:YES]; // V1 is the current topmost view controller

Мне нравится это лучше, чем использование UIPopover, потому что вам не нужно возиться со стрелками, и пользователь не может закрыть его, нажав вне всплывающего окна.

Эти свойства также можно установить в раскадровке /nib через конструктор. Чтобы установить preferredContentSize, отметьте "Использовать предпочтительный явный размер" и установите значения.

Это работает только на iPad.

Ответ 5

file .m --- > это файл реализации

-(IBAction)anyAlert:(id)sender{

   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"A Message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK!", @"Other Title", nil];
    [alert show];
    [alert release];
}

запомнить declare

-(IBAction)anyAlert:(id)sender; 

в заголовочном файле file .h --- >

Он работает для меня, надеюсь, для вас...

Ответ 6

Создайте UIView для v2 и добавьте v1.

- (void)viewDidLoad
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button addTarget:self 
                   action:@selector(aMethod:)
         forControlEvents:UIControlEventTouchDown];
    [button setTitle:@"Show View" forState:UIControlStateNormal];
        button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
    [self.view addSubview:button];
}

- (void)aMethod:(id)sender 
{
    CGRect * imageFrame = CGRectMake(10, 90, 300, 300);
    V2 *v2 = [[V2 alloc] initWithFrame:imageFrame];
    [self.view addSubview:v2];
}

Ответ 7

Если вы используете Storyboard, вы можете выполнить следующий шаг:

  • Добавить контроллер просмотра (V2), настроить пользовательский интерфейс так, как вы хотите.

* на основе прикрепленного изображения

  • добавить UIView - установить фон в черный и непрозрачность до 0,5
  • добавьте UIImageView, который будет использоваться в качестве вашего всплывающего окна (Pls принимает к сведению, что изображение и представление не должны иметь одинаковый уровень/иерархию. Не делайте образное представление дочерним элементом представления, иначе непрозрачность uiview повлияет на UIImageView)
  1. Настоящий V2 Модиально

  2. Нажмите кнопку "Сег". В Инспекторе атрибутов установите представление как Полноэкранный. Удалите анимацию, если вам нравится

Storyboard

  1. Выберите V2. В Инспекторе атрибутов установите представление как Полноэкранный. Проверьте Определить контекст и предоставить контекст

Storyboard

  1. Выберите MainView вашего V2 (изображение с изображением Pls. Check). Установите backgroundColor в Очистить цвет

Storyboard