文档章节

UIAlertView study

蝴蝶庆庆
 蝴蝶庆庆
发布于 2015/08/14 13:49
字数 415
阅读 18
收藏 0

首先要自定义一个UIAlertView扩展类,如MAlertView:

.h文件

#import <Foundation/Foundation.h>

@interface  MAlertView : UIAlertView {

    UITextField *passwdField;

    NSInteger textFieldCount;

}

- (void)addTextField:(UITextField *)aTextField placeHolder:(NSString *)placeHolder;

@end


.m文件

#import "MAlertView.h"

#define kMAlertViewTextFieldHeight 30.0

#define kMAlertViewMargin 10.0

@implementation MAlertView

- (void)initialize{

}

//2 buttons supported at most

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...{

    if ((self = [super initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles,nil])) {

    }

    return self;

}

- (void)layoutSubviews{

    CGRect rect = self.bounds;

    rect.size.height += textFieldCount*(kMAlertViewTextFieldHeight + kMAlertViewMargin);

    self.bounds = rect;

    float maxLabelY = 0.f;

    int textFieldIndex = 0;

    for (UIView *view in self.subviews) {

        if ([view isKindOfClass:[UIImageView class]]) {

        }

       else if ([view isKindOfClass:[UILabel class]]) {         

            rect = view.frame;

            maxLabelY = rect.origin.y + rect.size.height;

        }

        else if ([view isKindOfClass:[UITextField class]]) {   

            rect = view.frame;

            rect.size.width = self.bounds.size.width - 2*kMAlertViewMargin;

            rect.size.height = kMAlertViewTextFieldHeight;

            rect.origin.x = kMAlertViewMargin;

            rect.origin.y = maxLabelY + kMAlertViewMargin*(textFieldIndex+1) + kMAlertViewTextFieldHeight*textFieldIndex;

            view.frame = rect;

            textFieldIndex++;

        }

        else {  //UIThreePartButton            

            rect = view.frame;

            rect.origin.y = self.bounds.size.height - 65.0;

            view.frame = rect;

        }

    }

}

- (void)addTextField:(UITextField *)aTextField placeHolder:(NSString *)placeHolder{

    if (aTextField != nil) {

        textFieldCount++;

        aTextField.frame = CGRectZero;

        aTextField.borderStyle = UITextBorderStyleRoundedRect;

        aTextField.placeholder = placeHolder;

        [self addSubview:aTextField];

//        [self setNeedsLayout];

    }

}

@end


如何使用此扩展类:

- (void)viewDidLoad

{

    [superviewDidLoad];

    MAlertView *alert = [[MAlertViewallocinitWithTitle:@"Title"message:nildelegate:selfcancelButtonTitle:@"Cancel"otherButtonTitles:@"OK",nil];

    UITextField* accountField=[[UITextFieldalloc]init];

    UITextField* passwdField=[[UITextFieldalloc]init];

    [alert addTextField:accountField placeHolder:@"Account"];

    [alert addTextField:passwdField placeHolder:@"Password"];

    [alert show];

    [alert release];

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex//按键响应函数

{

    NSString* msg = [[NSStringallocinitWithFormat:@"您按下的第%d个按钮!",buttonIndex];

    UIAlertView* alert = [[UIAlertViewalloc]initWithTitle:@"提示"

                                                   message:msg

                                                  delegate:nil

                                         cancelButtonTitle:@"确定"

                                         otherButtonTitles:nil];

    [alert show];

    [alert release];

    [msg release];

    

}

效果如图。


进行了简单的封装,只需要用addTextField:placeHolder:方法将textField加进去就好了,其他使用方法和UIAlertView完全一样。
再作些补充说明:因为UIAlertView只有在点击了按钮才能进行交互,所有的text值都是在点击之后获取对应的textField的值。
有些朋友说空值的情况,这个可以在点击之后判断如果是空值就再次弹出alertView就可以了

参考:http://www.cocoachina.com/bbs/read.php?tid=86733

下载源代码:http://download.csdn.net/detail/x1135768777/4214283

© 著作权归作者所有

蝴蝶庆庆
粉丝 0
博文 4
码字总数 415
作品 0
海淀
私信 提问
Objective-C Runtime之着魔的UIAlertView

原文出处: ian博客(@ianisme ) 传统的UIAlertView: 在一个类中有多个UIAlertView,不同的UIAlertView对应不同的事件,我们使用的传统方法如下: Objective-C 1 2 3 4 5 6 7 8 9 10 11 12...

刘星石
2016/04/14
12
0
一个BUG的发现、定位和解决

前言 在iOS 11发布之后,出现了一系列适配相关的问题,UIScrollView在pagingEnabled=YES时滑动手势不灵敏,UITableView的滑动删除功能变动,UIImagePickerViewController的取消按钮点击区域变...

落影loyinglin
2017/10/10
0
0
IOS提示控件UIActionSheet,UIAlertView

iphone中常用的消息提示控件,就是UIActionSheet和UIAlertView了,在Web开发中,UIActionSheet就像是confirm(),而UIAlertView就像是alert()一样 UIActionSheet UIAlertView 但在iphone中,这...

长平狐
2012/10/25
164
0
UIAlertView的基本使用

#import "ViewController.h" //遵守代理 @interface ViewController ()<UIAlertViewDelegate> @end @implementationViewController - (void)viewDidLoad { [super viewDidLoad]; /** 初始化U......

DevShaw
2016/01/26
20
0
UIAlertView基本使用方法

UIAlertView常用于应用界面信息警告提示。 创建和显示UIAlertView 下面显示一个带有“取消”和“确定”两个按钮的的UIAlertView提示对话框。 处理UIAlertView按钮事件 通常需要处理用户点击U...

鉴客
2012/01/09
8.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

Knative 初体验:Eventing Hello World

作者 | 阿里云智能事业群高级开发工程师 元毅 基于事件驱动是Serveless的核心功能之一,通过事件驱动服务,满足了用户按需付费(Pay-as-you-go)的需求。在之前的文章中我们介绍过 Knative ...

zhaowei121
28分钟前
2
0
利用AJAX向后台servlet传JSON数据,后台利用fastjson进行解析

一,json的构建 JSON的格式分为两种,第一种类似于JavaScript中的对象(这里需要注意的是JS中的对象与java中的对象概念是不一样的,js可以在对象中定义属性,方法等,类似于java中的类,但是...

我叫小糖主
29分钟前
1
0
Adobe开发出一个反修图工具 还原人像PS 痕迹

“这是一个假人,但在网路上有多少自拍可以代表真人?”一些读者在虚拟偶像的讨论下评论了这篇文章。 事实上,在上传照片先进行修图似乎是一种新的“社交礼仪”,并且越来越难以区分真假内容...

wowloop
32分钟前
5
0
壮丽70年·奋斗新时代|蒸妙中药熏蒸和汗蒸的区别

桑拿、汗蒸、熏蒸相信这些在日常生活中都常能听到,如今现代人的生活和工作压力越来越大,很多人的身体早已吃不消了,一些人就会选择汗蒸或者熏蒸来放松身体。 汗蒸是一种休闲全新的养生方式...

公益传承
33分钟前
0
0
setSystemUiVisibility方法和getSystemUiVisibility方法

这两个方法的调用方式如下: getActivity().getWindow().getDecorView().setSystemUiVisibility; getActivity().getWindow().getDecorView().getSystemUiVisibility; 参考资料: http://blo......

天王盖地虎626
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部