XCode: Как создать контроллер представления PopUp, который появляется в другом контроллере представления - PullRequest
11 голосов
/ 14 сентября 2011

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

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

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

Спасибо

Ответы [ 7 ]

24 голосов
/ 14 сентября 2011

Вы можете создать такое представление, установив соответствующий тип свойства 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's important to do this after presentModalViewController
V2.view.superview.center = V1.view.center;
[V1 release];
6 голосов
/ 14 сентября 2011

Попробуйте это:

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 голосов
/ 02 декабря 2014

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

Эти свойства также можно установить в раскадровке / коннекторе с помощью дизайнера.Чтобы установить предпочитаемый размер содержимого, установите флажок «Использовать предпочтительный явный размер» и установите значения.

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

1 голос
/ 20 сентября 2017

Если вы используете раскадровку, вы можете выполнить следующие действия:

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

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

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

Присутствует V2 Модально

Нажмите на переход.В инспекторе атрибутов установите представление как на весь экран .Уберите анимацию, если хотите

Storyboard

Выберите V2.В инспекторе атрибутов установите представление как на весь экран .Отметьте Определяет контекст и предоставляет контекст

Storyboard

Выберите MainView вашего V2 (пожалуйста, проверьте изображение).Установите backgroundColor на Clear Color

Storyboard

1 голос
/ 12 декабря 2012

Существует очень хорошая библиотека для отображения контроллера представления в виде всплывающего окна на iPhone, см. Здесь https://github.com/martinjuhasz/MJPopupViewController

0 голосов
/ 04 декабря 2012

Создайте 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];
}
0 голосов
/ 29 сентября 2011

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];
}

не забудьте объявить

-(IBAction)anyAlert:(id)sender; 

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

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

...