在Windows应用程序中,经常使用模态(Model)对话框来和用户进行简单的交互,比如登录框。
在IOS应用程序中,有时我们也希望做同样的事情。但IOS的UI库中,没有模态对话框,最接近那个样子的应该算是AlertView。
但仅用AlertView,我们只能做文字提示,而不能和用户做交互。
本文将介绍如何基于AlertView做定制,实现模态对话框的功能。以密码修改框为例:

1. 首先,我们要继承AlertView类,在类的头文件PwdModifyView.h中,加入控件的声明
    这里我们把控件都声明为property,目的是让外部的类可以访问用户输入的数据。

#import <UIKit/UIKit.h>

@interface PwdModifyView : UIAlertView

@property(nonatomic, retain) UITextField* _oldPwd;    // 旧密码输入框
@property(nonatomic, retain) UITextField* _newPwd;    // 新密码输入框
@property(nonatomic, retain) UITextField* _cfmPwd;    // 新密码确认框

@end
 
2. 在PwdModifyView.m文件中,需要实现两个函数
 
- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... {
    self = [super initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles, nil];
    if (self != nil) {
        // 初始化自定义控件,注意摆放的位置,可以多试几次位置参数直到满意为止
        // createTextField函数用来初始化UITextField控件,在文件末尾附上
        self._oldPwd = [self createTextField:@"旧密码"
                                   withFrame:CGRectMake(22, 45, 240, 36)];
        [self addSubview:self._oldPwd];
       
        self._newPwd = [self createTextField:@"新密码"
                                   withFrame:CGRectMake(22, 90, 240, 36)];
        [self addSubview:self._newPwd];
       
        self._cfmPwd = [self createTextField:@"确认新密码"
                                   withFrame:CGRectMake(22, 135, 240, 36)];
        [self addSubview:self._cfmPwd];
    }
   
    return self;
}
 
 
// Override父类的layoutSubviews方法
- (void)layoutSubviews {
    [super layoutSubviews];     // 当override父类的方法时,要注意一下是否需要调用父类的该方法
   
    for (UIView* view in self.subviews) {
        // 搜索AlertView底部的按钮,然后将其位置下移
        // IOS5以前按钮类是UIButton, IOS5里该按钮类是UIThreePartButton
        if ([view isKindOfClass:[UIButton class]] ||
            [view isKindOfClass:NSClassFromString(@"UIThreePartButton")]) {
            CGRect btnBounds = view.frame;
            btnBounds.origin.y = self._cfmPwd.frame.origin.y + self._cfmPwd.frame.size.height + 7;
            view.frame = btnBounds;
        }
    }
   
    // 定义AlertView的大小
    CGRect bounds = self.frame;
    bounds.size.height = 260;
    self.frame = bounds;
}
 
3. 当需要弹出该对话框时,只需创建并初始化一个PwdModifyView对象,然后调用对象的show()方法即可。
 
PwdModifyDlg* pwdModifyDlg = [[PwdModifyView alloc]
                     initWithTitle:@"密码修改"
                     message:nil
                     delegate:self
                     cancelButtonTitle:@"确定"
                     otherButtonTitles:@"取消", nil];
[pwdModifyDlg show];
 
 
最后,附上UITextField的创建函数
 
- (UITextField*)createTextField:(NSString*)placeholder withFrame:(CGRect)frame {
    UITextField* field = [[UITextField alloc] initWithFrame:frame];
    field.placeholder = placeholder;
    field.secureTextEntry = YES;
    field.backgroundColor = [UIColor whiteColor];
    field.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

return field;
}

[IOS] 自定义AlertView实现模态对话框相关推荐

  1. php使用自定义alert,IOS_iOS自定义alertView提示框实例分享,本文实例为大家分享iOS自定义a - phpStudy...

    iOS自定义alertView提示框实例分享 本文实例为大家分享iOS自定义alertView提示框,先上图,弹框的背景色,按钮背景色,提示的消息的字体颜色都可以改变 利用单例实现丰富的自定义接口 / ...

  2. 自定义tag打包Bootstrap模态对话框并动态加载传值

    文章目录 Bootstrap的模态对话框 自定义tag文件如下: 加载方法 注意事项 动态加载的好处 Bootstrap的模态对话框 为了复用bootstrap的模态框,将其封装入自定义tag文件中, ...

  3. qt文件选择对话框 linux,Linux下QT实现自定义对话框以及设置模态和非模态对话框...

    最近使用QT做毕业设计,其中用到了对话框,但系统默认的对话框不能满足我的需求,于是决定自己来封装一个,这需要根据QT提供的QDialog基类来建立,以下附上头文件及实现文件,已测试通过. #ifnde ...

  4. 变分模态分解_Android小部件示例中的模态对话框(弹出)

    变分模态分解 在此示例中,我们将看到如何在主屏幕中创建一个可以打开弹出对话框的Android小部件. 如您所知,Android Widgets是小型应用程序,基本上可以做两件事. 按下时启动新的活动, ...

  5. 鸡啄米vc++2010系列11(非模态对话框的创建)

    上一节鸡啄米讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 鸡啄米已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.鸡啄米会将 ...

  6. QT中的模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

  7. jQuery查找标签--选择器,筛选器,模态对话框, 左侧菜单栏

    查找标签 选择器: 基本选择器(同css) id选择器 $("#id")标签选择器 $('tagName')class选择器 $(".className")配合 ...

  8. html对话框跳转页面,html5各种页面切换效果和模态对话框用法总结

    这篇文章主要为大家介绍了html5各种页面切换效果和模态对话框用法总结,较为详细的介绍了HTML5的各种页面元素的使用技巧,非常具有实用价值,需要的朋友可以参考下 本文详细总结了html5各种页面切换 ...

  9. html5各种页面切换效果和模态对话框

    页面动画: data-transition 属性可以定义页面切换是的动画效果. 例如:<a href="index.html" data-transition="p ...

最新文章

  1. SpringBoot 连接mysql踩到的坑
  2. 二分查找(递归与非递归)
  3. 监听android 上的完成按键
  4. java ssm常用注解_SSM框架中常用的注解
  5. 2017年10月21日普及组 简单单词
  6. LazyInitializationException--由于session关闭引发的异常
  7. 【Java】JDBC连接MySQL/SQLServer/Oracle三种数据库
  8. ANSI,Unicode,UTF-8网页编码的区别【转】
  9. 使用XStream进行对象和xml的转换,极度舒适
  10. Linux学习笔记(9)
  11. linux最常用命令
  12. matlab 机械振动,MATLAB使用教程之用MATLAB仿真机械振动.doc
  13. 梦幻模拟战更新服务器正在维护,“梦幻模拟战2.0”更新维护公告
  14. Axure制作音乐App原型图
  15. 20162328WJH实验五网络编程与安全实验报告
  16. ansys安装注意事项
  17. dismiss ios pop效果_动画切换效果之push、pop、present、dismiss
  18. 阿里云国际站代充值个人注册与分销商邀约区别
  19. 网页三维地图技术初探
  20. python爬取搜狗微信指定关键词的全部内容

热门文章

  1. 【BZOJ2733】【HNOI2012】永无乡(Splay启发式合并)
  2. 基于STM32的DAC音频输出
  3. 外卖行业评价管理解决方案:最新饿了么/美团外卖差评解决办法,请收好!
  4. 缺失的运维,困顿的共享单车
  5. 互联网完蛋了,已经。
  6. viterbi-algorithm 维特比算法的例子解析
  7. Android Studio:单选按钮和复选框
  8. HDU 2201 熊猫阿波的故事
  9. oracle sql时间排序函数,sql的rank函数
  10. 在WIN7中用maven将spring boot项目远程部署到Linux虚拟机的docker容器