创建自定义弹出窗口/警报UIView / UIViewController的正确方法

尤西·萨法尔(Yossi Tsafar)

我已经为iOS开发了一段时间了,但是我总是遇到自定义警报/弹出窗口的问题,我只是不知道将自定义视图作为弹出窗口添加到Windows中所有其他视图之上正确方法是什么应用程序。

我已经在线检查过,有几种方法可以做到,但是创建这些自定义警报/弹出窗口的最佳方法是什么?

有一个CustomViewController类,这就是我创建它并将其添加为弹出窗口的方式:

  1. 创建一个新的 UIViewController

  2. UIViewUIViewControllerXIB文件中添加一个作为的子项self.view(它将在其中保存弹出式元素)

  3. 在的内部添加此方法UIViewController以显示视图:

    - (void)presentViewController
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window.windowLevel = UIWindowLevelStatusBar;
        self.window.screen = [UIScreen mainScreen];
        [self.window makeKeyAndVisible];
    
        UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];
        [mainWindow setUserInteractionEnabled:NO];
        [self.window addSubview:self.view];
    
        self.view.alpha = 0.0f;
        self.backgroundImage.image = [self takeSnapshot];
    
        [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
    
            self.view.transform = CGAffineTransformIdentity;
            self.view.alpha = 1.0f;
    
        } completion:nil];
    }
    
  4. 在的内部添加此方法UIViewController以删除视图:

    - (void)dismissShareViewController
    {
        [UIView animateWithDuration:DEFAULT_ANIMATION_DURATION
                         animations:^{
                             self.view.alpha = 0.0f;
                         } completion:^(BOOL finished) {
                             [self.view removeFromSuperview];
                             self.window = nil;
                             [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
                             UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];
                             [mainWindow setUserInteractionEnabled:YES];
                         }];
    }
    

用法:

  1. 为该属性创建一个属性 UIViewController

    @property (strong, nonatomic) CustomViewController *viewController;
    
  2. 初始化并呈现

    - (void)showCustomViewController
    {
        self.viewController = [[CustomViewController alloc] init];
        [self.viewController presentViewController];
    }
    

问题是我总是得到一个Received Memory Warning另外,我还在- (void)dealloc里面添加了一个方法,CustomViewController以了解UIViewController能否正确释放,但是由于某种原因,该dealloc方法是在之后presentViewController而不是dismissShareViewController应该在之后立即调用的

我想要实现的另一件事:CustomViewController没有UIStatusBar,当我尝试演示时MFMailComposeViewController,总是MFMailComposeViewController显示不带UIStatusBar或带有白色状态栏的显示,但是我无法将其再次更改为默认值。我在这里尝试了几个问题,StackOverflow但是没有任何运气,它只是不会改变。

将UIView或UIWindow置于状态栏上方

请一劳永逸,有人会帮助我。

乔乔

UIAlertView是UIView的子类。如果您想创建一个自定义的警报视图,我也可以将UIView子类化,以便轻松地将您现有的UIAlertView换成新的自定义视图。

您可以将自定义警报视图放在最顶部的UIWindow上,以覆盖所有内容。

@interface MyAlertView : UIView
- (void)duplicateAllTheFunctionsOfUIAlertViewHere;
@end

@implementation MyAlertView : UIView
- (id)initWithFrame:(CGRectMake)frame {
  // add your custom subviews here
  // An example of a custom background color:
  self.backgroundColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.5];
}

- (void)duplicateAllTheFunctionsOfUIAlertViewHere {
   //re-implement all the functionality in your custom ways
}

- (void)show
{
  UIView* superview = [UIApplication sharedApplication].keyWindow;
  self.frame = superview.bounds;
  [superview addSubview:self];
  // Do an animation if you want to get fancy
}

@end

在视图控制器中的用法:

- (void)showAlertView
{
  UIView* alertView = [[MyAlertView alloc] initWithTextAndButtons:@"blah"];
  [alertView show];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实现自定义弹出窗口的正确方法?活动与对话框与警报对话框

来自分类Dev

如何从自定义 UIView 调用 UIViewController 中的方法/操作?

来自分类Dev

使用UIViewControllerInteractiveTransitioning委托协议实现自定义UIViewController交互式过渡的正确方法

来自分类Dev

创建自定义Segue的正确方法

来自分类Dev

创建自定义Segue的正确方法

来自分类Dev

为UIView创建自定义init方法以添加UILabel

来自分类Dev

为UIView创建自定义init方法以添加UILabel

来自分类Dev

Swift中的UIViewController的自定义UIView

来自分类Dev

如何使用情节提要从自定义uitableviewcell正确启动弹出窗口选择

来自分类Dev

在自定义UIView和UIViewController中同时使用相同的UITextFieldDelegate方法

来自分类Dev

在JavaScript中创建自定义错误的正确方法

来自分类Dev

创建自定义“ Todo物品”的正确方法?

来自分类Dev

使用参数创建自定义UIView初始化方法

来自分类Dev

删除UIViewController的正确方法

来自分类Dev

自定义窗口弹出

来自分类Dev

iOS,创建自定义弹出样式UIView

来自分类Dev

在横向中自定义UIViewController动画的解决方法?

来自分类Dev

使用自定义弹出窗口创建JavaFX ComboBox

来自分类Dev

使用自定义弹出窗口创建JavaFX ComboBox

来自分类Dev

是否可以为 MGLPolyline 创建自定义弹出窗口?

来自分类Dev

绘制自定义视图的正确方法?

来自分类Dev

如何将自定义UIView从Xib文件加载到UIViewController中的UIView中?

来自分类Dev

创建自定义查找的最佳方法

来自分类Dev

创建自定义大写方法

来自分类Dev

约束的常量未在自定义UIView的方法中更新

来自分类Dev

Flutter:如何从现有的窗口小部件正确创建自定义窗口小部件并使用其属性(有时有条件)

来自分类Dev

在MVC6中创建自定义模型联编程序的正确方法是什么?

来自分类Dev

如何在自定义用户配置文件创建表单中正确覆盖保存方法?

来自分类Dev

如何使用Vue-Socket.io正确创建自定义套接字方法?

Related 相关文章

  1. 1

    实现自定义弹出窗口的正确方法?活动与对话框与警报对话框

  2. 2

    如何从自定义 UIView 调用 UIViewController 中的方法/操作?

  3. 3

    使用UIViewControllerInteractiveTransitioning委托协议实现自定义UIViewController交互式过渡的正确方法

  4. 4

    创建自定义Segue的正确方法

  5. 5

    创建自定义Segue的正确方法

  6. 6

    为UIView创建自定义init方法以添加UILabel

  7. 7

    为UIView创建自定义init方法以添加UILabel

  8. 8

    Swift中的UIViewController的自定义UIView

  9. 9

    如何使用情节提要从自定义uitableviewcell正确启动弹出窗口选择

  10. 10

    在自定义UIView和UIViewController中同时使用相同的UITextFieldDelegate方法

  11. 11

    在JavaScript中创建自定义错误的正确方法

  12. 12

    创建自定义“ Todo物品”的正确方法?

  13. 13

    使用参数创建自定义UIView初始化方法

  14. 14

    删除UIViewController的正确方法

  15. 15

    自定义窗口弹出

  16. 16

    iOS,创建自定义弹出样式UIView

  17. 17

    在横向中自定义UIViewController动画的解决方法?

  18. 18

    使用自定义弹出窗口创建JavaFX ComboBox

  19. 19

    使用自定义弹出窗口创建JavaFX ComboBox

  20. 20

    是否可以为 MGLPolyline 创建自定义弹出窗口?

  21. 21

    绘制自定义视图的正确方法?

  22. 22

    如何将自定义UIView从Xib文件加载到UIViewController中的UIView中?

  23. 23

    创建自定义查找的最佳方法

  24. 24

    创建自定义大写方法

  25. 25

    约束的常量未在自定义UIView的方法中更新

  26. 26

    Flutter:如何从现有的窗口小部件正确创建自定义窗口小部件并使用其属性(有时有条件)

  27. 27

    在MVC6中创建自定义模型联编程序的正确方法是什么?

  28. 28

    如何在自定义用户配置文件创建表单中正确覆盖保存方法?

  29. 29

    如何使用Vue-Socket.io正确创建自定义套接字方法?

热门标签

归档