模仿UIAlertView,iOS模式对话框

来源:互联网 发布:淘宝特卖商城天天特价 编辑:程序博客网 时间:2024/05/19 04:52

转自:http://xubenyang.me/362


在程序UI设计上,很多情况我们会需要一种模式的对话框来进行操作。现有的iOS提供如下方式满足这种需求:

  1. UIAlertView
  2. UIViewController  : - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated

但是这两者明显都有不足,比如说UIAlertView官方只能显示title,message, buttons. 如果想要显示一个帐号密码输入框就不行)虽然网络上有一些程序员通过hack的方式实现了,http://stackoverflow.com/questions/376104/uitextfield-in-uialertview-on-iphone-how-to-make-it-responsive, 但是现在还是挺费劲的),所以想要随心所欲的在多样化模式对话框的UI界面标准的lib明显不能满足这个需求。于是我就实现了一个可以任意设置界面的模式对话框,叫 BYDialog.在给这个东西命名上,我想找一个好的前缀,但是一直没有更好的想法,所以就自恋地直接用自己的中文名的拼音开头作了前缀。

BYDialog核心思想:

  1. 新建一个UIWindow,其windowLevel比UIWindowLevelStatusBar大一点,这样就可以让显示的内容完全覆盖status bar了。
  2. UIWindow背景透明,然后添加一个拥有灰灰背景图片的UIImageView,暂且加maskview。这样原来的内容就会有像UIAlertView一样的淡化效果,突出显示模式对话框的内容。
  3. 在UIWindow中添加BYDialog(是UIView的subclass),BYDialog并显示bounce动画效果。

这样就能够像UIAlertView一现显示出来了:)

如何自定义BYDialog用户界面:(具体可以参考TestDialog的实现)

  1. subclass BYDialog, 然后必须改写- (void)loadContentView,并提供你自己想要显示的UI内容,注意这个内容要适当大小,不要超出屏幕大小。
  2. override - (void)willPresentDialog;- (void)didPresentDialog;- (void)willDismissDialog;- (void)didDismissDialog;并响应这种事件消息。
  3. 可以为自己的类提供各种delegate函数,根据以上捕捉到的事件消息或者其他地方,触发delegate函数调用。

所以整个UIAlertView 模仿过程完成了,效果如截图:

---------------------------------------------

源代码地址:

Google Code : http://code.google.com/p/bydialog/



原创粉丝点击