常用控件

1.    UILabel

 

·UILable是iPhone界面最基本的控件,主要用来显示文本信息。

·常用属性和方法有:

1、创建

CGRect rect = CGRectMake(100, 200, 50, 50);

UILabel *label = [[UILabel alloc] initWithFrame:rect];

2、text //设置和读取文本内容,默认为nil

label.text = @”文本信息”; //设置内容

NSLog(@”%@”, label.text); //读取内容

3、textColor //设置文字颜色,默认为黑色

lable.textColor = [UIColor redColor];

4、font //设置字体大小,默认17

label.font = [UIFont systemFontOfSize:20]; //⼀一般方法

label.font = [UIFont boldSystemFontOfSize:20]; //加粗方法

label.font = [UIFont fontWithName:@"Arial" size:16]; //指定

字体的方法

//还有⼀一种从外部导入字体的方法。

5、textAlignment //设置标签文本对齐方式。

label.textAlignment = NSTextAlignmentCenter; //还有

NSTextAlignmentLeft、 NSTextAlignmentRight.

6、numberOfLines //标签最多显示行数,如果为0则表示多行。

label.numberOfLines = 2;

7、enabled //只是决定了Label的绘制方式,将它设置

为NO将会使文本变暗,表示它没有激活,这时向它设置颜色值是无效的。

label.enable = NO;

8、highlighted //是否高亮显示

label.highlighted = YES;

label.highlightedTextColor = [UIColor orangeColor]; //高亮

显示时的文本颜色

9、ShadowColor //设置阴影颜色

[label setShadowColor:[UIColor blackColor]];

10、ShadowOffset //设置阴影偏移量

[label setShadowOffset:CGSizeMake(-1, -1)];

11、baselineAdjustment //如果adjustsFontSizeToFitWidth属性设

置为YES,这个属性就来控制文本基线的行为。

label.baselineAdjustment = UIBaselineAdjustmentNone;

UIBaselineAdjustmentAlignBaselines = 0,默认,文本最上端与中线对齐。

UIBaselineAdjustmentAlignCenters, 文本中线与label中线对齐。

UIBaselineAdjustmentNone, 文本最低端与label中线对齐。

12、Autoshrink //是否自动收缩

Fixed Font Size 默认,如果Label宽度小于文字长度时时,文字大小不自动缩放

minimumScaleFactor 设置最小收缩比例,如果Label宽度小于文字长度时,文字

进行收缩,收缩超过比例后,停止收缩。

minimumFontSize 设置最小收缩字号,如果Label宽度小于文字长度时,文字字号

减小,低于设定字号后,不再减小。//6.0以后不再使用了。

label.minimumScaleFactor = 0.5;

13、adjustsLetterSpacingToFitWidth //改变字母之间的间距来适应Label大小

myLabel.adjustsLetterSpacingToFitWidth = NO;

14、 lineBreakMode //设置文字过长时的显示格式            

label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显

示,后面部分省略不显示。

label.lineBreakMode = NSLineBreakByClipping;剪切与文本宽度相同的内

容长度,后半部分被删除。

label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字

以……方式省略,显示尾部文字内容。

label.lineBreakMode = NSLineBreakByTruncatingMiddle;中间的内容

以……方式省略,显示头尾的文字内容。

label.lineBreakMode = NSLineBreakByTruncatingTail;结尾部分的内容

以……方式省略,显示头的文字内容。

label.lineBreakMode = NSLineBreakByWordWrapping;以单词为显示单位显

示,后面部分省略不显示。

15、 adjustsFontSizeToFitWidth //设置字体大小适应label宽度 

label.adjustsFontSizeToFitWidth = YES;

16、attributedText:设置标签属性文本。

NSString *text = @"first";

NSMutableAttributedString *textLabelStr =

[[NSMutableAttributedString alloc]

initWithString:text];

[textLabelStr

setAttributes:@{NSForegroundColorAttributeName :

[UIColor lightGrayColor], NSFontAttributeName :

[UIFont systemFontOfSize:17]} range:NSMakeRange(11,

10)];

label.attributedText = textLabelStr;

17、竖排文字显示每个文字加一个换行符,这是最方便和简单的实现方式。

label.text = @"请\n竖\n直\n方\n向\n排\n列";

label.numberOfLines = [label.text length];

 

 

18、计算UIlabel 随字体多行后的高度

CGRect bounds = CGRectMake(0, 0, 200, 300);

heightLabel = [myLabel textRectForBounds:bounds

limitedToNumberOfLines:20]; //计算20行后的Label的Frame

NSLog(@"%f",heightLabel.size.height);

19、UILabel根据字数多少自动实现适应高度

UILabel *msgLabel = [[UILabel alloc]

initWithFrame:CGRectMake(15, 45, 0, 0)];

msgLabel.backgroundColor = [UIColor lightTextColor];

[msgLabel setNumberOfLines:0];

msgLabel.lineBreakMode = UILineBreakModeWordWrap;

msgLabel.font = [UIFont fontWithName:@"Arial" size:12];

CGSize size = CGSizeMake(290, 1000);

msgLabel.text = @"获取到的deviceToken,我们可以通过webservice服务提

交给.net应用程序,这里我简单处理,直接打印出来,拷贝到.net应用环境中使

用。";

CGSize msgSie = [msgLabel.text sizeWithFont:fonts

constrainedToSize:size];

[msgLabel setFrame:CGRectMake(15, 45, 290, msgSie.height)];

 

 

20、渐变字体Label

UIColor *titleColor = [UIColor colorWithPatternImage:[UIImage

imageNamed:@"btn.png"]];

NSString *title = @"Setting";

UILabel *titleLabel = [[UILabel alloc]

initWithFrame:CGRectMake(0, 0, 80, 44)];

titleLabel.textColor = titleColor;

titleLabel.text = title;

titleLabel.font = [UIFont boldSystemFontOfSize:20];

titleLabel.backgroundColor = [UIColor clearColor];

[self.view addSubview:titleLabel];

[titleLabel release];

21、Label添加边框

titleLabel.layer.borderColor = [[UIColor grayColor] CGColor];

titleLabel.layer.borderWidth = 2;

 

 

 

 

 

 

 

 

 

 

 

2.    UIButtom

 

    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];

     

 

//    能够定义的button类型有以下6种,

//    typedef enum {

 

//        UIButtonTypeCustom = 0,          自定义风格

//        UIButtonTypeRoundedRect,         圆角矩形

 

 

//        UIButtonTypeDetailDisclosure,    蓝色小箭头按钮,主要做详细说明用

//        UIButtonTypeInfoLight,           亮色感叹号

 

//        UIButtonTypeInfoDark,            暗色感叹号

//        UIButtonTypeContactAdd,          十字加号按钮

 

//    } UIButtonType;

13

     

 

 

    //给定button在view上的位置

    button1.frame = CGRectMake(20, 20, 280, 20);

 

     

    //button背景色

 

    button1.backgroundColor = [UIColor clearColor];

     

 

    //设置button填充图片

    //[button1 setImage:[UIImage imageNamed:@"btng.png"] forState:UIControlStateNormal];

 

     

    //设置button标题

 

    [button1 setTitle:@"点击" forState:UIControlStateNormal];

     

 

    /* forState: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现*/

    //以下是几种状态

 

//    enum {

//        UIControlStateNormal       = 0,         常规状态显现             

 

//        UIControlStateHighlighted  = 1 << 0,    高亮状态显现   

//        UIControlStateDisabled     = 1 << 1,    禁用的状态才会显现

 

//        UIControlStateSelected     = 1 << 2,    选中状态             

//        UIControlStateApplication  = 0x00FF0000, 当应用程序标志时           

 

//        UIControlStateReserved     = 0xFF000000  为内部框架预留,可以不管他            

//    };

 

     

 

    /*

 

     * 默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点,如果这下面的这个属性设置为no,

     * 那么可以去掉这个功能

 

    */

    button1.adjustsImageWhenHighlighted = NO;

 

    /*跟上面的情况一样,默认情况下,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置*/

    button1.adjustsImageWhenDisabled = NO;

 

    /* 下面的这个属性设置为yes的状态下,按钮按下会发光*/

    button1.showsTouchWhenHighlighted = YES;

 

     

    /* 给button添加事件,事件有很多种,我会单独开一篇博文介绍它们,下面这个时间的意思是

 

     按下按钮,并且手指离开屏幕的时候触发这个事件,跟web中的click事件一样。

     触发了这个事件以后,执行butClick:这个方法,addTarget:self 的意思是说,这个方法在本类中

 

     也可以传入其他类的指针*/

    [button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside];

 

     

     

 

 

    //显示控件

    [self.view addSubview:button1];

 

 

 

 

 

 

 

 

 

 

 

 

 

3.    Segmented Control

 

NSArray *segmentedArray =[[NSArrayalloc]initWithObjects:@"1",@"2",@"3",@"4",nil]; 

    //初始化UISegmentedControl  

    UISegmentedControl *segmentedControl= [[UISegmentedControlalloc]initWithItems:segmentedArray];  

    segmentedControl.frame = CGRectMake(20.0,20.0, 250.0, 50.0);  

    segmentedControl.selectedSegmentIndex = 2;//设置默认选择项索引  

    segmentedControl.tintColor =[UIColor redColor];  

  //有基本四种样式

    segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;//设置样式

//segmentedControl.segmentedControlStyle = UISegmentedControlStyleBordered;//设置样式

//segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;//设置样式

//segmentedControl.segmentedControlStyle = UISegmentedControlStyleBezeled;//设置样式

//  segmentedControl.momentary = YES;//设置在点击后是否恢复原样     

    [segmentedControlsetTitle:@"two" forSegmentAtIndex:1];//设置指定索引的题目  

[segmentedControl insertSegmentWithImage:[UIImageimageNamed:@"mei.png"] atIndex:2 animated:NO];//在指定索引插入一个选项并设置图片

  [segmentedControl removeSegmentAtIndex:0animated:NO];//移除指定索引的选项  

//   [segmentedControl setWidth:70.0forSegmentAtIndex:2];//设置指定索引选项的宽度  

 //   [segmentedControlsetContentOffset:CGSizeMake(10.0,10.0) forSegmentAtIndex:4];//设置选项中图片等的左上角的位置  

    

    //获取指定索引选项的图片imageForSegmentAtIndex:  

    UIImageView *imageForSegmentAtIndex= [[UIImageViewalloc]initWithImage:[segmentedControl imageForSegmentAtIndex:1]]; 

    imageForSegmentAtIndex.frame = CGRectMake(60.0, 120.0, 30.0, 30.0); ;

    

    //获取指定索引选项的标题titleForSegmentAtIndex  

    UILabel *titleForSegmentAtIndex= [[UILabel alloc]initWithFrame:CGRectMake(100.0, 160.0, 30.0, 30.0)]; 

    titleForSegmentAtIndex.text =[segmentedControl titleForSegmentAtIndex:0];  

    

    //获取总选项数segmentedControl.numberOfSegments  

    UILabel *numberOfSegments= [[UILabel alloc]initWithFrame:CGRectMake(140.0, 170.0, 30.0, 30.0)]; 

    numberOfSegments.text =[NSString stringWithFormat:@"%d",segmentedControl.numberOfSegments]; 

 

    //获取指定索引选项的宽度widthForSegmentAtIndex:  

    UILabel *widthForSegmentAtIndex= [[UILabel alloc]initWithFrame:CGRectMake(180.0, 210.0, 70.0, 30.0)]; 

    widthForSegmentAtIndex.text =[NSString stringWithFormat:@"%f",[segmentedControl widthForSegmentAtIndex:2]]; 

     

   // [segmentedControlsetEnabled:NO forSegmentAtIndex:4];//设置指定索引选项不可选  

   // BOOL enableFlag =[segmentedControl isEnabledForSegmentAtIndex:4];//判断指定索引选项是否可选 

 

 

 

 

 

 

 

 

 

 

 

4.  Text Field

 

//初始化textfield并设置位置及大小

  UITextField *text = [[UITextFieldalloc]initWithFrame:CGRectMake(20, 20, 130, 30)];

 

//设置边框样式,只有设置了才会显示边框样式  

  text.borderStyle =UITextBorderStyleRoundedRect;

 

  typedef enum {

    UITextBorderStyleNone, 

    UITextBorderStyleLine,

    UITextBorderStyleBezel,

    UITextBorderStyleRoundedRect  

  } UITextBorderStyle;

  

//设置输入框的背景颜色,此时设置为白色 如果使用了自定义的背景图片边框会被忽略掉  

   text.backgroundColor = [UIColorwhiteColor];

 

//设置背景

  text.background = [UIImageimageNamed:@"dd.png"];

 

//设置背景 

  text.disabledBackground = [UIImageimageNamed:@"cc.png"];

 

//当输入框没有内容时,水印提示 提示内容为password

  text.placeholder = @"password";

 

//设置输入框内容的字体样式和大小

  text.font = [UIFontfontWithName:@"Arial" size:20.0f];

 

//设置字体颜色

  text.textColor = [UIColor redColor];

 

//输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内容

  text.clearButtonMode =UITextFieldViewModeAlways;

 

typedef enum {

   UITextFieldViewModeNever,  重不出现

   UITextFieldViewModeWhileEditing, 编辑时出现

    UITextFieldViewModeUnlessEditing,  除了编辑外都出现

    UITextFieldViewModeAlways  一直出现

} UITextFieldViewMode;

 

//输入框中一开始就有的文字

  text.text = @"一开始就在输入框的文字";

 

//每输入一个字符就变成点 用语密码输入

  text.secureTextEntry = YES;

 

//是否纠错

  text.autocorrectionType =UITextAutocorrectionTypeNo;

 

typedef enum {

   UITextAutocorrectionTypeDefault, 默认

    UITextAutocorrectionTypeNo,  不自动纠错

   UITextAutocorrectionTypeYes,  自动纠错

} UITextAutocorrectionType;

 

//再次编辑就清空

  text.clearsOnBeginEditing = YES; 

 

//内容对齐方式

  text.textAlignment = UITextAlignmentLeft;

 

//内容的垂直对齐方式  UITextField继承自UIControl,此类中有一个属性contentVerticalAlignment

  text.contentVerticalAlignment =UIControlContentVerticalAlignmentCenter;

 

//设置为YES时文本会自动缩小以适应文本窗口大小.默认是保持原来大小,而让长文本滚动  

  textFied.adjustsFontSizeToFitWidth = YES;

 

//设置自动缩小显示的最小字体大小

  text.minimumFontSize = 20;

 

//设置键盘的样式

  text.keyboardType =UIKeyboardTypeNumberPad;

 

typedef enum {

    UIKeyboardTypeDefault,      默认键盘,支持所有字符        

   UIKeyboardTypeASCIICapable,  支持ASCII的默认键盘

    UIKeyboardTypeNumbersAndPunctuation,  标准电话键盘,支持+*#字符

    UIKeyboardTypeURL,           URL键盘,支持.com按钮 只支持URL字符

UIKeyboardTypeNumberPad,             数字键盘

UIKeyboardTypePhonePad,     电话键盘

    UIKeyboardTypeNamePhonePad,  电话键盘,也支持输入人名

UIKeyboardTypeEmailAddress,   用于输入电子 邮件地址的键盘    

UIKeyboardTypeDecimalPad,     数字键盘 有数字和小数点

    UIKeyboardTypeTwitter,       优化的键盘,方便输入@、#字符

    UIKeyboardTypeAlphabet =UIKeyboardTypeASCIICapable, 

} UIKeyboardType;

 

//首字母是否大写

  text.autocapitalizationType =UITextAutocapitalizationTypeNone;

 

typedef enum {

   UITextAutocapitalizationTypeNone, 不自动大写

   UITextAutocapitalizationTypeWords,  单词首字母大写

   UITextAutocapitalizationTypeSentences,  句子的首字母大写

   UITextAutocapitalizationTypeAllCharacters, 所有字母都大写

} UITextAutocapitalizationType;

 

//return键变成什么键

  text.returnKeyType =UIReturnKeyDone;

 

typedef enum {

    UIReturnKeyDefault, 默认 灰色按钮,标有Return

    UIReturnKeyGo,     标有Go的蓝色按钮

    UIReturnKeyGoogle,标有Google的蓝色按钮,用语搜索

    UIReturnKeyJoin,标有Join的蓝色按钮

    UIReturnKeyNext,标有Next的蓝色按钮

    UIReturnKeyRoute,标有Route的蓝色按钮

    UIReturnKeySearch,标有Search的蓝色按钮

    UIReturnKeySend,标有Send的蓝色按钮

    UIReturnKeyYahoo,标有Yahoo的蓝色按钮

    UIReturnKeyYahoo,标有Yahoo的蓝色按钮

    UIReturnKeyEmergencyCall, 紧急呼叫按钮

} UIReturnKeyType;

 

//键盘外观

textView.keyboardAppearance=UIKeyboardAppearanceDefault;

typedef enum {

UIKeyboardAppearanceDefault, 默认外观,浅灰色

UIKeyboardAppearanceAlert,     深灰 石墨色

 

} UIReturnKeyType;

 

 

 

 

5. Slider

 

初始化一个Slider

UISlider *slider = [[UISlideralloc]initWithFrame:CGRectMake(0, 400,320 , 20)];

访问UISlider的值

    

slider.value = 3;   // 设置 slider 的值

float value =slider.value;   // 得到 slider 的值

[slider setValue:3animated:YES];   // 设置 slider 的值

    

slider.minimumValue = 0;  //设置滑轮所能滚动到的最小值

slider.maximumValue = 1;  //设置滑轮所能滚动到的最大值

 

 

 

 

6. Switch

 

1.UISwitch的初始化

UISwitch *switchView = [[UISwitchalloc] initWithFrame:CGRectMake(54.0f, 16.0f, 100.0f, 28.0f)];

2.设置UISwitch的初始化状态

switchView.on = YES;//设置初始为ON的一边

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二, 常用控件的事件响应方法

1.    Button

 

[btn1 addTarget:selfaction:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];

 

 

 

 

 

 

 

 

 

 

2.Segmented Control

 [mySegmentedControladdTarget:selfaction:@selector(segmentAction:)forControlEvents:UIControlEventValueChanged]; //添加委托方法

//具体委托方法实例  

-(void)segmentAction:(UISegmentedControl *)Seg{

    NSInteger Index =Seg.selectedSegmentIndex;

    NSLog(@"Index %i",Index);

    switch (Index) {

        case 0:

           [self selectmyView1];

           break;

        case 1:

           [self selectmyView2];

           break;

        case 2:

           [self selectmyView3];

           break;

        case 3:

           [self selectmyView4];

           break;

        case 4:

           [self selectmyView5];

           break;

        case 5:

           [self selectmyView6];

           break;    

        default:

           break;

    }

}

//自定义UISegmentedcontrol

UISegmentedControl*segmentedControl=[[UISegmentedControl alloc] initWithFrame:CGRectMake(80.0f,8.0f, 200.0f, 30.0f) ];    

[segmentedControlinsertSegmentWithTitle:@"Food to eat" atIndex:0 animated:YES];    

[segmentedControlinsertSegmentWithTitle:@"Food to avoid" atIndex:1 animated:YES];    

segmentedControl.segmentedControlStyle =UISegmentedControlStyleBar;    

segmentedControl.momentary = YES;    

segmentedControl.multipleTouchEnabled=NO;    

[segmentedControl addTarget:selfaction:@selector(Selectbutton:) forControlEvents:UIControlEventValueChanged];    

UIBarButtonItem *segButton = [[UIBarButtonItemalloc] initWithCustomView:segmentedControl];  

self.navigationItem.rightBarButtonItem =segButton;  //添加到导航栏中

 

 

 

 

 

 

 

 

 

 

 

 

3.Text Field

//设置代理 用于实现协议

  text.delegate = self;

 

//把textfield加到视图中

  [self.window addSubview:text];

 

//最右侧加图片是以下代码   左侧类似

    UIImageView *image=[[UIImageViewalloc] initWithImage:[UIImage imageNamed:@"right.png"]];

    text.rightView=image;

    text.rightViewMode =UITextFieldViewModeAlways; 

 

typedef enum {

    UITextFieldViewModeNever,

    UITextFieldViewModeWhileEditing,

    UITextFieldViewModeUnlessEditing,

    UITextFieldViewModeAlways

} UITextFieldViewMode;

 

 

//按return键键盘往下收  becomeFirstResponder

 

类要采用UITextFieldDelegate协议

 

text.delegate = self;  声明text的代理是我,我会去实现把键盘往下收的方法 这个方法在UITextFieldDelegate里所以我们要采用UITextFieldDelegate这个协议

 

- (BOOL)textFieldShouldReturn:(UITextField*)textField

{

    [text resignFirstResponder];   //主要是[receiverresignFirstResponder]在哪调用就能把receiver对应的键盘往下收

    return YES;

}

 

 

重写绘制行为

除了UITextField对象的风格选项,你还可以定制化UITextField对象,为他添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围。以下方法都可以重写。

 

– textRectForBounds:      //重写来重置文字区域

– drawTextInRect:          //改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.

– placeholderRectForBounds:  //重写来重置占位符区域

– drawPlaceholderInRect:  //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.

– borderRectForBounds:  //重写来重置边缘区域

– editingRectForBounds:  //重写来重置编辑区域

– clearButtonRectForBounds:  //重写来重置clearButton位置,改变size可能导致button的图片失真

– leftViewRectForBounds:

– rightViewRectForBounds:

 

委托方法

 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{  

    

//返回一个BOOL值,指定是否循序文本字段开始编辑  

    

    return YES;  

}  

 

- (void)textFieldDidBeginEditing:(UITextField *)textField{  

 

 //开始编辑时触发,文本字段将成为first responder  

}  

 

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{  

 

//返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder  

   //要想在用户结束编辑时阻止文本字段消失,可以返回NO  

   //这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息  

   

    return NO;  

}  

 

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  

 

//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。  

//这对于想要加入撤销选项的应用程序特别有用  

//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。     

//要防止文字被改变可以返回NO  

//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中  

 

     return YES;  

}  

 

- (BOOL)textFieldShouldClear:(UITextField *)textField{  

 

//返回一个BOOL值指明是否允许根据用户请求清除内容  

//可以设置在特定条件下才允许清除内容  

 

     return YES;  

}  

 

-(BOOL)textFieldShouldReturn:(UITextField *)textField{  

 

//返回一个BOOL值,指明是否允许在按下回车键时结束编辑  

 //如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起[textField resignFirstResponder];

//查一下resign这个单词的意思就明白这个方法了  

 

     return YES;  

}  

 

 

 

通知

UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用。除了UIControl类的标准事件,你还可以使用下列UITextField类特有的事件

 

UITextFieldTextDidBeginEditingNotification

UITextFieldTextDidChangeNotification

UITextFieldTextDidEndEditingNotification

当文本字段退出编辑模式时触发。通知的object属性存储了最终文本。

 

因为文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知

 

UIKeyboardWillShowNotification   //键盘显示之前发送

UIKeyboardDidShowNotification   //键盘显示之后发送

UIKeyboardWillHideNotification   //键盘隐藏之前发送

UIKeyboardDidHideNotification    //键盘隐藏之后发送

 

 

 

 

 

4.     Slider

[sliderA addTarget:selfaction:@selector(sliderDragUp:) forControlEvents:UIControlEventTouchUpInside];

 

 

 

 

 

 

 

5.     Switch

 

[switchView addTarget:selfaction:@selector(switchAction:) forControlEvents:UIControlEventValueChanged];

 

 

 

 

 

 

 

 

 

 

三, 常用内置视图种类和使用方法

 

1.    Progress View

 

UIProgressView 进度指示器

UIProgressView 与UIActivityIndicatorView相似,只不过它提供了一个接口让你可以显示一个类似进度条的东西,这样就能让用户知道当前操作完成了多少(告知用户离操作结束还多远)。

一.创建

UIProgressView* progressView = [ [UIProgressView alloc ]
initWithFrame:CGRectMake(150.0,20.0,130.0,30.0)];

二. 设置风格:

progressView .UIProgressViewStyle=UIProgressViewStyleDefault;

系统给你提供了2种风格:

UIProgressViewStyleDefault 标准进度条

UIProgressViewStyleDefault 深灰色进度条,用于工具栏中

 

三.显示

[ self.toolBar addSubview:progressView ];

四.进度

当它显示出来时你的程序可以更新它的进度,属性progress是一个0.0到1.0之间的浮点数:

progressView.progress = 0. 5;

五.示例代码

4.09UIProgressView(1)

-(void)progressChanged:(NSTimer *)timer

{

if (_progressView.progress >= 1.0){

[timer invalidate];

}

//如果对象的progress大于1.0,则定时器失效

_progressView.progress += 0.02;

//让对象的progress值每次都加0.02,以此达到让进度动起来的效果。

}

- (void)viewDidLoad

{

[super viewDidLoad];

self.progressView =[[UIProgressView alloc]init];

//创建一个UIProgressView对象:_progressView

_progressView.frame = CGRectMake(0, 20, 320,0);

//设置它的位置及大小,它的高是默认的为9,可以写成0。

_progressView.progressViewStyle =UIProgressViewStyleDefault;

//设置它的风格,为默认的

_progressView.trackTintColor =[UIColorblueColor];

//设置轨道的颜色

_progressView.progressTintColor =[UIColorwhiteColor];

//设置进度的颜色

_progressView.progress = 0.0;

//设置进度的初始值,即初始位置。范围是0.0-1.0

[self.view addSubview:_progressView];

//把_progressView加入到view上

[_progressView release];

//要记得release

[NSTimer scheduledTimerWithTimeInterval:0.5

target:self

selector:@selector(progressChanged:)

userInfo:nil

repeats:YES];

//设置定时器

}

 

 

 

2.    Page Control

 

   pageCtrl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 400, bounds.size.width, 30)];  //创建UIPageControl,位置在屏幕最下方。 

    pageCtrl.numberOfPages = 6;//总的图片页数  

    pageCtrl.currentPage = 0; //当前页  

    [pageCtrl addTarget:self action:@selector(pageTurn:) forControlEvents:UIControlEventValueChanged];  //用户点击UIPageControl的响应函数  

    [self.view addSubview:pageCtrl];  //将UIPageControl添加到主界面上。  

 

 

 

 

3.    Scroll View

 

contentSize是scrollview可以滚动的区域,比如frame= (0 ,0 ,320 ,480) contentSize = (320 ,960),代表你的scrollview可以上下滚动,滚动区域为frame大小的两倍。

contentOffset是scrollview当前显示区域顶点相对于frame顶点的偏移量,比如上个例子你拉到最下面,contentoffset就是(0 ,480),也就是y偏移了480

 

contentInset是scrollview的contentview的顶点相对于scrollview的位置,例如你的contentInset= (0 ,100),那么你的contentview就是从scrollview的(0 ,100)开始显示

 

另外UITableView是UIScrollView的子类,它们在上述属性又有所不同,tabelview的contentsize是由它的下列方法共同实现的

- (NSInteger)numberOfSections;

- (NSInteger)numberOfRowsInSection:(NSInteger)section;

- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section;

- (CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section;

它会自动计算所有的高度和来做为它的contentsize的height.

 

例如你在delegate方法

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {

    return 100;

}

那么你的tabelview的contentsize就是(320, 4400)

posted @ 2011-10-13 17:36 zcbbin 阅读(194) 评论(2) 编辑

 

UIScrollView 原理

UIScrollView 原理   

 

 

scroll view 原理

//作者:禚来强 iphone开发q*****:79190809 邮箱:zhuolaiqiang@gmail.com转帖请保留

demo 可以到我的博客http://blog.csdn.net/diyagoanyhacker/article/list/10

在滚动过程当中,其实是在修改原点坐标

 

当手指触摸后, scroll view会暂时拦截触摸事件,使用一个

计时器,假如在计时器到点后,没有发生手指移动事件,

那么,scroll view发送tracking events到被点击的subview

假如在计时器到点前,发生了移动事件,那么 scroll view 取消tracking

自己发生滚动

 

子类可以重载touchesShouldBegin:withEvent:inContentView: 决定自己是否接收touch事件

pagingEnabled当值是YES,会自动滚动到subview的边界,默认是NO

touchesShouldCancelInContentView: 开始发送trackingmessages消息给subview的时候

调用这个方法,决定是否发送tracking messages消息到subview,假如返回NO,发送,YES则不发送

假如 canCancelContentTouches属性是NO,则不调用这个方法

来影响如何处理滚动手势

 

scroll view还处理缩放和平移手势

要实现缩放和平移,必须实现委托viewForZoomingInScrollView:

scrollViewDidEndZooming:withView:atScale:

两个方法,另外 maximumZoomScale和minimumZoomScale两个属性要不一样 

 

几个属性

tracking

当touch后还没有拖动的时候,值是YES,否则NO

 

 

zoomBouncing

当内容放大到最大或者最小的时候,值是YES,否则NO

 

 

zooming

当正在缩放的时候,值是YES,否则NO

 

decelerating

 

当滚动后,手指放开,但是还在继续滚动中,这个时候是 YES,其他是NO

 

decelerationRate

 

设置手指放开后的减速率

 

 

maximumZoomScale

一个浮点数,表示能放最大的倍数

 

 

minimumZoomScale 

一个浮点数,表示能缩最小的倍数

 

 

pagingEnabled

当值是YES,会自动滚动到subview的边界,默认是NO

 

 

scrollEnabled

决定是否可以滚动

 

delaysContentTouches

 

是个布尔值,当值是YES的时候,用户触碰开始,scroll view要延迟一会,看看是否用户有意图滚动,假如滚动了,那么捕捉touch-down事件,否则就不捕捉, 假如值是NO,当用户触碰, scroll view会立即触发touchesShouldBegin:withEvent:inContentView:, 默认是YES

 

canCancelContentTouches

当值是YES的时候,用户触碰后,然后在一定时间内没有移动,scrollView发送tracking events,然后用户移动手指足够长度触发滚动事件,这个时候,scrollView发送了touchesCancelled:withEvent: 到subview,然后scroView开始滚动

假如值是NO,scrollView发送tracking events后,就算用户移动手指,scrollView也不会滚动

 

contentSize

里面内容的大小,也就是可以滚动的大小,默认是0,没有滚动效果。

 

showsHorizontalScrollIndicator

滚动时,是否显示水平滚动条

 

showsVerticalScrollIndicator

滚动时,是否显示垂直滚动条

 

bounces

默认是yes,就是滚动超过边界,会反弹有反弹回来的效果,假如是 NO,那么滚动到达边界,那么会连忙停止

 

bouncesZoom

和bounces类似,区别在于,这个效果反映在缩放上面,假如缩放超过最大缩放,那么会反弹效果,假如是NO,则到达最大或者最小的时候,立即停止

 

directionalLockEnabled

默认是NO, 可以在垂直和水平方向同时运动, 当值是YES, 假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动, 假如一开始是对角方向滚动,则不会禁止某个方向

 

indicatorStyle

滚动条的样式,基本只是设置颜色,总共3个颜色,默认,黑色的,白色的

 

scrollIndicatorInsets

设置滚动条的位置

 

 

 

 

 

 

 

 

 

4.    Table View

 

 

http://www.cnblogs.com/kenshincui/p/3931948.html

 

 

 

 

 

 

 

 

 

 

5.    Picker View

 

一.UIPickerView

1.UIPickerView的常见属性

// 数据源(用来告诉UIPickerView有多少列多少行)

@property(nonatomic,assign)id<UIPickerViewDataSource> dataSource;

// 代理(用来告诉UIPickerView每1列的每1行显示什么内容,监听UIPickerView的选择)

@property(nonatomic,assign)id<UIPickerViewDelegate>   delegate;

// 是否要显示选中的指示器

@property(nonatomic)       BOOL                      showsSelectionIndicator;

// 一共有多少列

@property(nonatomic,readonly) NSIntegernumberOfComponents;

2.UIPickerView的常见方法

// 重新刷新所有列

- (void)reloadAllComponents;

// 重新刷新第component列

- (void)reloadComponent:(NSInteger)component;

// 主动选中第component列的第row行

- (void)selectRow:(NSInteger)rowinComponent:(NSInteger)component animated:(BOOL)animated;

// 获得第component列的当前选中的行号

-(NSInteger)selectedRowInComponent:(NSInteger)component;

3.数据源方法(UIPickerViewDataSource)

//  一共有多少列

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView;

//  第component列一共有多少行

- (NSInteger)pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)component;

4.代理方法(UIPickerViewDelegate)

//  第component列的宽度是多少

- (CGFloat)pickerView:(UIPickerView *)pickerViewwidthForComponent:(NSInteger)component;

//  第component列的行高是多少

- (CGFloat)pickerView:(UIPickerView *)pickerViewrowHeightForComponent:(NSInteger)component;

//  第component列第row行显示什么文字

- (NSString *)pickerView:(UIPickerView*)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;

//  第component列第row行显示怎样的view(内容)

- (UIView *)pickerView:(UIPickerView *)pickerViewviewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView*)view;

//  选中了pickerView的第component列第row行

- (void)pickerView:(UIPickerView *)pickerViewdidSelectRow:(NSInteger)row inComponent:(NSInteger)component;

二.UIDatePicker

1.常见属性

// datePicker的显示模式

@property (nonatomic) UIDatePickerModedatePickerMode;

// 显示的区域语言

@property (nonatomic, retain)NSLocale   *locale;

2.监听UIDatePicker的选择

* 因为UIDatePicker继承自UIControl,所以通过addTarget:...监听

三.程序启动的完整过程

1.main函数

2.UIApplicationMain

* 创建UIApplication对象

* 创建UIApplication的delegate对象

3.delegate对象开始处理(监听)系统事件(没有storyboard)

* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法

* 在application:didFinishLaunchingWithOptions:中创建UIWindow

* 创建和设置UIWindow的rootViewController

* 显示窗口

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)

* 创建UIWindow

* 创建和设置UIWindow的rootViewController

* 显示窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值