ПРИМІТКА. Це рішення не працює в iOS 8. Я опублікую нове рішення якомога швидше.
Я збираюся відповісти тут за допомогою розкадровки, але це можливо і без розкадровки.
Init: Створіть два UIViewController
в раскадровці.
- скажемо,
FirstViewController
що є нормальним, а SecondViewController
яке буде спливаючим.
Модальний Segue: Покласти UIButton
в FirstViewController і створити SEGUE з цього питання UIButton
в SecondViewController
якості модального Segue.
Зробити прозорим: тепер виберіть UIView
( UIView
Який створюється за замовчуванням із UIViewController
) SecondViewController
та змініть колір тла на чистий.
Зробити фон Dim: Додати UIImageView
в SecondViewController
якій охоплює весь екран і встановлює його зображення в будь - то потьмяніли напівпрозорого зображення. Ви можете отримати зразок тут: UIAlertView
Фонове зображення
Дизайн дисплея: Тепер додайте UIView
і зробіть будь-який дизайн, який ви хочете показати. Ось скріншот моєї розкадровки
- Тут я додаю кнопку segue на кнопку входу, яка відкривається у
SecondViewController
вигляді спливаючого вікна, щоб запитати ім’я користувача та пароль
Важливо: Тепер цей головний крок. Ми хочемо, щоб SecondViewController
це не приховувало FirstViewController повністю. Ми встановили чіткий колір, але цього недостатньо. За замовчуванням він додає чорний колір за презентацією моделі, тому нам потрібно додати один рядок коду в viewDidLoad of FirstViewController
. Ви можете додати його в іншому місці, але він повинен працювати до початку сезону.
[self setModalPresentationStyle:UIModalPresentationCurrentContext];
Звільнення : Коли звільняти, залежить від вашого випадку використання. Це модальна презентація, тому для звільнення ми робимо те, що робимо для модальної презентації:
[self dismissViewControllerAnimated:YES completion:Nil];
Це все.....
Будь-які пропозиції та коментарі вітаються.
Демо:
Ви можете отримати демо-проект із тут: Popup Demo
НОВЕ : Хтось зробив дуже гарну роботу над цією концепцією: MZFormSheetController
Нове : Я знайшов ще один код для отримання такої функції: KLCPopup
Оновлення iOS 8 : Я зробив цей метод для роботи як з iOS 7, так і з iOS 8
+ (void)setPresentationStyleForSelfController:(UIViewController *)selfController presentingController:(UIViewController *)presentingController
{
if (iOSVersion >= 8.0)
{
presentingController.providesPresentationContextTransitionStyle = YES;
presentingController.definesPresentationContext = YES;
[presentingController setModalPresentationStyle:UIModalPresentationOverCurrentContext];
}
else
{
[selfController setModalPresentationStyle:UIModalPresentationCurrentContext];
[selfController.navigationController setModalPresentationStyle:UIModalPresentationCurrentContext];
}
}
Ви можете використовувати цей метод всередині PrepaForSegue, наприклад, таким чином
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
PopUpViewController *popup = segue.destinationViewController;
[self setPresentationStyleForSelfController:self presentingController:popup]
}