转载自:http://www.cnblogs.com/maxfong/articles/2216180.html http://www.cnblogs.com/wengzilin/archive/2012/03/13/2393985.html http://www.2cto.com/kf/201111/112631.html http://blog.csdn.net/amdbenq/article/details/7866166
UIBUTTON
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];//初始化button,选择button类型
btn.frame = CGRectMake(30, 360, 90, 35);//大小和位置
[btn setTitle:@"ZoomIn" forState:UIControlStateNormal];//正常状况下button显示的标题
[btn setTitle:@"ZoomIn" forState:UIControlStateHighlighted];//高亮显示时button的标题
[btn addTarget:self action:@selector(zoomInAction:) forControlEvents:UIControlEventTouchUpInside];//button被按下又抬起后发生的事件
//@selector可以理解为"选择子",selector是一个指针变量,类似于sender。 这里是将method的方法指定给新建的这个btn。
/*在 method 方法里可以将 sender 看作是 btn 了
比如设置btn的hidden属性等等
btn.hidden = YES;
这样btn被隐藏了
/*
// 通过背景图片设置按钮高亮
IImage *normalImage = [UIImage imageNamed:@"NormalBlueButton.png"];
UIImage *highlightedImage = [UIImage imageNamed:@"HighlightedBlueButton"];
self.myButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.myButton.frame = CGRectMake(110.0f,200.0f,100.0f, 37.0f);
[self.myButton setBackgroundImage:normalImage forState:UIControlStateNormal];
[self.myButton setBackgroundImage:highlightedImage forState:UIControlStateHighlighted];
[self.myButton setTitle:@"Normal" forState:UIControlStateNormal];
[self.myButton setTitle:@"Pressed" forState:UIControlStateHighlighted];
//这里创建一个圆角矩形的按钮
02 UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
03
04 // 能够定义的button类型有以下6种,
05 // typedef enum {
06 // UIButtonTypeCustom = 0, 自定义风格
07 // UIButtonTypeRoundedRect, 圆角矩形
08 // UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用
09 // UIButtonTypeInfoLight, 亮色感叹号
10 // UIButtonTypeInfoDark, 暗色感叹号
11 // UIButtonTypeContactAdd, 十字加号按钮
12 // } UIButtonType;
13
14 //给定button在view上的位置
15 button1.frame = CGRectMake(20, 20, 280, 20);
16
17 //button背景色
18 button1.backgroundColor = [UIColor clearColor];
19
20 //设置button填充图片
21 //[button1 setImage:[UIImage imageNamed:@"btng.png"] forState:UIControlStateNormal];
22
23 //设置button标题
24 [button1 setTitle:@"点击" forState:UIControlStateNormal];
25
26 /* forState: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现*/
27 //以下是几种状态
28 // enum {
29 // UIControlStateNormal = 0, 常规状态显现
30 // UIControlStateHighlighted = 1 << 0, 高亮状态显现
31 // UIControlStateDisabled = 1 << 1, 禁用的状态才会显现
32 // UIControlStateSelected = 1 << 2, 选中状态
33 // UIControlStateApplication = 0x00FF0000, 当应用程序标志时
34 // UIControlStateReserved = 0xFF000000 为内部框架预留,可以不管他
35 // };
36
37 /*
38 * 默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点,如果这下面的这个属性设置为no,
39 * 那么可以去掉这个功能
40 */
41 button1.adjustsImageWhenHighlighted = NO;
42 /*跟上面的情况一样,默认情况下,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置*/
43 button1.adjustsImageWhenDisabled = NO;
44 /* 下面的这个属性设置为yes的状态下,按钮按下会发光*/
45 button1.showsTouchWhenHighlighted = YES;
46
47 /* 给button添加事件,事件有很多种,我会单独开一篇博文介绍它们,下面这个时间的意思是
48 按下按钮,并且手指离开屏幕的时候触发这个事件,跟web中的click事件一样。
49 触发了这个事件以后,执行butClick:这个方法,addTarget:self 的意思是说,这个方法在本类中
50 也可以传入其他类的指针*/
51 [button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside];
52
53
54 //显示控件
55 [self.view addSubview:button1];
UILabel *label1 = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 20.0, 200.0, 50.0)];
//设置显示文字
label1.text = @"label1";
//设置字体:粗体,正常的是 SystemFontOfSize
label1.font = [UIFont boldSystemFontOfSize:20];
//设置文字颜色
label1.textColor = [UIColor orangeColor];
//设置文字位置
label1.textAlignment = UITextAlignmentRight// UITextAlignmentCenter//UITextAlignmentLeft;
//设置字体大小适应label宽度
label1.adjustsFontSizeToFitWidth = YES;
//设置label的行数
label1.numberOfLines = 2;
label1.backgroudColor=[UIColor clearColor]; //可以去掉背景色
//设置高亮
label1.highlighted = YES;
label1.highlightedTextColor = [UIColor orangeColor];
//设置阴影
label1.shadowColor = [UIColor redColor];
label1.shadowOffset = CGSizeMake(1.0,1.0);
//设置是否能与用户进行交互
label1.userInteractionEnabled = YES;
//设置label中的文字是否可变,默认值是YES
label1.enabled = NO;
//设置文字过长时的显示格式
label1.lineBreakMode = UILineBreakModeMiddleTruncation;//截去中间
// typedef enum {
// UILineBreakModeWordWrap = 0,
// UILineBreakModeCharacterWrap,
// UILineBreakModeClip,//截去多余部分
// UILineBreakModeHeadTruncation,//截去头部
// UILineBreakModeTailTruncation,//截去尾部
// UILineBreakModeMiddleTruncation,//截去中间
// } UILineBreakMode;
//如果adjustsFontSizeToFitWidth属性设置为YES,这个属性就来控制文本基线的行为
label1.baselineAdjustment = UIBaselineAdjustmentNone;
// typedef enum {
// UIBaselineAdjustmentAlignBaselines,
// UIBaselineAdjustmentAlignCenters,
// UIBaselineAdjustmentNone,
// } UIBaselineAdjustment;
<pre name="code" class="objc">[label1 sizetofit];///label1文本自适应顶置
[self.view addSubview:label1]; [label1 release];
UITextField的初始化和设置
textField = [[UITextField alloc] initWithFrame:CGRectMake(120.0f, 80.0f, 150.0f, 30.0f)];
[textField setBorderStyle:UITextBorderStyleRoundedRect]; //外框类型
textField.placeholder = @"password"; //默认显示的字
textField.secureTextEntry = YES; //密码
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
textField.returnKeyType = UIReturnKeyDone;
textField.clearButtonMode = UITextFieldViewModeWhileEditing; //编辑时会出现个修改X
textField.delegate = self;
2.要实现的Delegate方法,关闭键盘
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[self.textField resignFirstResponder];
return YES;
}
3. 可以在UITextField使用下面方法,按return键返回
-(IBAction) textFieldDone:(id) sender
{
[textFieldName resignFirstResponder];
}
链接TextField控件的"Did end on exit"
最右侧加图片是以下代码,
UIImageView *imgv=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]];
text.rightView=imgv;
text.rightViewMode = UITextFieldViewModeAlways;
如果是在最左侧加图片就换成:
text.leftView=imgv;
text.leftViewMode = UITextFieldViewModeAlways;
UITextField 继承自 UIControl,此类中有一个属性contentVerticalAlignment
所以想让UITextField里面的text垂直居中可以这样写:
text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
查看函数的方法:
按住command键双击进入函数声明
按住alt键双击进入doc文档
///
文本框常用方法:
如何用程序删除文本框中选中的文本
[textView delete: nil];
///
如何限制文本框只能输入数字:
建立NSNumberFormatter的子类,增加这个方法,将formatter链接至文本框。
- (BOOL) isPartialStringValid: (NSString **) partialStringPtr
proposedSelectedRange: (NSRangePointer) proposedSelRangePtr
originalString: (NSString *) origString
originalSelectedRange: (NSRange) origSelRange
errorDescription: (NSString **) error
{
NSCharacterSet *nonDigits;
NSRange newStuff;
NSString *newStuffString;
nonDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
newStuff = NSMakeRange(origSelRange.location,
proposedSelRangePtr->location
- origSelRange.location);
newStuffString = [*partialStringPtr substringWithRange: newStuff];
if ([newStuffString rangeOfCharacterFromSet: nonDigits
options: NSLiteralSearch].location != NSNotFound) {
*error = @"不是数字";
return (NO);
} else {
*error = nil;
return (YES);
}
}
///
从文本框获取十六进制数据的代码
char singleNumberString[3] = {'\0','\0','\0'};
uint32_t singleNumber = 0;
uint32_t i = 0;
NSMutableData *data = [NSMutableData data];
//从文本框获取到得数据
const char *buf = [[_hexToSendTextField text] UTF8String];
//转换为十六进制
for(i = 0; i < strlen(buf); i+=2)
{
if(((i+1) < len && isxdigit(buf) && (isxdigit(buf[i+1])))
{
singleNumberString[0] = buf;
singleNumberString[1] = buf[i+1];
sscanf(singleNumberString, "%x", &singleNumber);
[data appendBytes:(void*)(&tmp) length:1];
}
else
{
break;
}
}
//输出
NSLog(@"%@", data);
/
点击 UITextView 输入文字,光标都从最初点开始
- (void)textViewDidChangeSelection:(UITextView *)textView
{
NSRange range;
range.location = 0;
range.length = 0;
textView.selectedRange = range;
}
///
软键盘
在登录页面要实现用户名和密码,密码要是点点格式,引入当前页面光标要停留在用户名选项,软键盘要弹出界面。如下图:
弹出键盘:
[username becomeFirstResponder];
取消键盘:
[username resignFirstResponder];
密码保护:
password.secureTextEntry=YES;
//
1.UITextField的初始化和设置
textField = [[UITextField alloc] initWithFrame:CGRectMake(120.0f, 80.0f, 150.0f, 30.0f)];
[textField setBorderStyle:UITextBorderStyleRoundedRect]; //外框类型
textField.placeholder = @"password"; //默认显示的字
textField.secureTextEntry = YES; //密码
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
textField.returnKeyType = UIReturnKeyDone;
textField.clearButtonMode = UITextFieldViewModeWhileEditing; //编辑时会出现个修改X
textField.delegate = self;
2.要实现的Delegate方法,关闭键盘
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[self.textField resignFirstResponder];
return YES;
}
3. 可以在UITextField使用下面方法,按return键返回
-(IBAction) textFieldDone:(id) sender
{
[textFieldName resignFirstResponder];
}
链接TextField控件的"Did end on exit"
限制输入文本的长度
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (range.location >= MAX_LENGTH)
return NO; // return NO to not change text
return YES;
}
if (textField.text.length >= 10 && range.length == 0)
return NO;
return YES;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([textField.text length] > MAXLENGTH)
{
textField.text = [textField.text substringToIndex:MAXLENGTH-1];
return NO;
}
return YES;
}
//
使用UITextFieldDelegate来隐藏键盘
在iPhone界面上,时常会需要当用户输入完内容后,隐藏键盘。 当然有很多方法,今天只介绍使用UITextFieldDelegate这个协议实现隐藏键盘。
其实很简单, 需要三步:
1. 在你的控制器类中,加入UITextFieldDelegate这个协议
如:@interface AddItemViewController : UIViewController <UITextFieldDelegate>
2. 在使用了UITextFieldDelegate协议的控制器类的实现中,加入- (BOOL)textFieldShouldReturn:方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
//设置焦点:
[UITextField becomeFirstResponder];
3. 将xib文件中的TextField控件的delegate变量指向到之前使用UITextFieldDelegate协议的那个控制器类,将 TextField的delegate IBOutlet变量右键链接到前面的控制器类的实例上。或者使用代码方式,指定相关TextField的delegate变量。
- (void)viewDidLoad
{
[super viewDidLoad];
itemNameField.delegate = self;
priceField.delegate = self;
}
复制代码
UISCroll
(1)初始化
一般的组件初始化都可以alloc和init来初始化,上一段代码初始化。
view plain
UIScrollView *sv =[[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0,self.view.frame.size.width, 400)];
一般的初始化也都有很多方法,都可以确定组件的Frame,或者一些属性,比如UIButton的初始化可以确定Button的类型。当然,我比较提倡大家用代码来写,这样比较了解整个代码执行的流程,而不是利用IB来弄布局,确实很多人都用IB来布局会省很多时间,但这个因人而异,我比较提倡纯代码写。
(2)滚动属性
UIScrollView的最大属性就是可以滚动,那种效果很好看,其实滚动的效果主要的原理是修改他的坐标,准确的讲是修改原点坐标,而UIScrollView跟其他组件的都一样,有自己的delegate,在.h文件中要继承UIScrollView的delegate然后在.m文件的viewDidLoad设置的delegate为self。如下:
view plain
sv.pagingEnabled = YES;
sv.backgroundColor = [UIColor blueColor];
sv.showsVerticalScrollIndicator = NO;
sv.showsHorizontalScrollIndicator = NO;
sv.delegate = self;
CGSize newSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height);
[sv setContentSize:newSize];
[self.view addSubview: sv];
在上面的代码中,一定要设置UIScrollView的pagingEnable为YES。不然你就是设置好了其他属性,它还是无法拖动,接下去的分别是设置背景颜色和是否显示水平和竖直拖动条,最后最重要的设置他的ContentSize,ContentSize的意思就是它所有内容的大小,这个和它的Frame是不一样的,只有ContentSize的大小大于Frame这样才可以支持拖动。
(3)结合UIPageControl做新闻翻页效果
初始化UIPageControl的方法都很简单,就是上面讲的alloc和init,不过大家要记住的一点就是如果你定义了全局变量一定要在delloc那里释放掉。
UIPageControl有一个userInteractionEnabled你可以设置它为NO。就是点击的时候它不调用任何方法。然后设置它的currentPage 为0,并把它加到view上去。
接下来在UIScrollView的delegate方法:
view plain
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
在这里你可以写上关于UIPageControl的页面设置的算法。如下
view plain
int index = fabs(scrollView.contentOffset.x) /scrollView.frame.size.width;
pageControl.currentPage = index;
(4)其他的
UIScrollView还支持处理缩放的动作,比如图片的缩小或者地图。
但是必须实现它的委托viewForZoomingInScrollView:
scrollViewDidEndZooming:withView:atScale:然后它的两个属性maximumZoomScale和minimumZoomScale 要不一样。这样就能基本实现图片的缩放了。
好了,今天讲UIScrollView和UIPageControl就到这里咯,希望大家都能理解。欢迎拍砖。
附加一个photo的利用UIScrollView实现的demo给大家: http://up.2cto.com/2011/1130/20111130025112243.zip
作者Andy---清风