oc常用代码整理

常用代码整理:

Xcode6,引入viewController代码:

1.     在Appdelegate先引入ViewController头文件

2.     ViewController vc =(ViewControlleralloc)init

Self.window.rootViewController = vc;

然后vc就代表ViewController对象,就可以调用其属性和方法了。

 

一般用通知来取代上面的写法:

//发送通知

[[[[NSNotificationCenterdefaultCenter]] postNotificationName:通知名object::nil];

//接受通知

//IB创建的对象调用initWithCoder要复写方法;

-(instancetype) initWithCoder(NSCoder*)coder{

self = [super initWithCoder:coder];

if(self){

[[ NSNotificationCenterdefaultCenter]addObserver:self selector:@selector(method)name:@”….”object:nil];

}

return self;

}

UILabel 多行文字自动换行 (自动折行)

 

UIView *footerView = [[UIView alloc]initWithFrame:CGRectMake(10, 100, 300, 180)];  

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 100, 300, 150)];  

label.text = @"where are you? whereare you? where are you? where are you? where are you? where are you? where areyou? where are you? where are you? where are you?";  

//清空背景颜色  

label.backgroundColor = [UIColorclearColor];  

//设置字体颜色为白色  

label.textColor = [UIColorwhiteColor];  

//文字居中显示  

label.textAlignment =UITextAlignmentCenter;  

//自动折行设置  

label.lineBreakMode =UILineBreakModeWordWrap;  

label.numberOfLines = 0;

iOSUILabel设置居上对齐,居中对齐,居下对齐

iOS中默认的UILabel中的文字在竖直方向上只能居中对齐,博主参考国外网站,从UILabel继承了一个新类,实现了居上对齐,居中对齐,居下对齐。具体如下:

typedef enum  

{  

    VerticalAlignmentTop = 0, // default  

    VerticalAlignmentMiddle,  

    VerticalAlignmentBottom,  

} VerticalAlignment;  

@interface myUILabel : UILabel  

{  

@private  

VerticalAlignment _verticalAlignment;  

}  

  

@property (nonatomic) VerticalAlignment verticalAlignment;  

  

@end  @implementation myUILabel  

@synthesize verticalAlignment = verticalAlignment_;  

  

- (id)initWithFrame:(CGRect)frame {  

    if (self = [super initWithFrame:frame]) {  

        self.verticalAlignment = VerticalAlignmentMiddle;  

    }  

    return self;  

}  

  

- (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment {  

    verticalAlignment_ = verticalAlignment;  

    [self setNeedsDisplay];  

}  

  

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {  

1.     CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];  

2.     switch (self.verticalAlignment) {  

        case VerticalAlignmentTop:  

            textRect.origin.y = bounds.origin.y;  

            break;  

        case VerticalAlignmentBottom:  

            textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;  

            break;  

        case VerticalAlignmentMiddle:  

            // Fall through.  

        default:  

            textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;  

    }  

    return textRect;  

}  

  

-(void)drawTextInRect:(CGRect)requestedRect {  

    CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];  

    [super drawTextInRect:actualRect];  

}    

@end  

lbl_mylabel = [[myUILabel alloc] initWithFrame:CGRectMake(20, 50, 150, 600)];  

UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"halfTransparent.png"]];//使用半透明图片作为label的背景色  

lbl_mylabel.backgroundColor = color;  

lbl_mylabel.textAlignment = UITextAlignmentLeft;  

lbl_mylabel.textColor = UIColor.whiteColor;  

lbl_mylabel.lineBreakMode = UILineBreakModeWordWrap;  

lbl_mylabel.numberOfLines = 0;  

[lbl_mylabel setVerticalAlignment:VerticalAlignmentTop];  

[self addSubview:lbl_mylabel]; 

ios UILabel 变量名不能为title

-[UILabel copyWithZone:]: unrecognized selector sent to instance

 

遇到了这样一个错误,找了半天没找到是什么错误,于是,Google搜索,打开第一个链接http://stackoverflow.com/questions/10784207/uilabel-copywithzone-unrecognized-selector-sent-to-instance

 

UILabel设置过长文本中间为省略号

 label.lineBreakMode = NSLineBreakByTruncatingMiddle;

参考:iOS组件之UILabel

 

iOS UILabel详解

http://blog.csdn.net/zhaopenghhhhhh/article/details/16331041

·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 = [UIFontfontWithName:@"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 //设置阴影颜色

[labelsetShadowColor:[UIColor blackColor]];

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

[labelsetShadowOffset: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 =

[[NSMutableAttributedStringalloc]

initWithString:text];

[textLabelStr

setAttributes:@{NSForegroundColorAttributeName:

[UIColorlightGrayColor], NSFontAttributeName :

[UIFontsystemFontOfSize: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行后的LabelFrame

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

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

UILabel*msgLabel = [[UILabel alloc]

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

msgLabel.backgroundColor= [UIColor lightTextColor];

[msgLabelsetNumberOfLines: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];

[msgLabelsetFrame: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.viewaddSubview:titleLabel];

[titleLabelrelease];

21、Label添加边框

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

titleLabel.layer.borderWidth= 2;

 

 

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  
比如设置btnhidden属性等等 
btn.hidden = YES; 
这样btn被隐藏了

/*

// 通过背景图片设置按钮高亮

IImage *normalImage = [UIImage imageNamed:@"NormalBlueButton.png"]; 

    UIImage *highlightedImage = [UIImageimageNamed:@"HighlightedBlueButton"];

    self.myButton = [UIButtonbuttonWithType:UIButtonTypeCustom];

   self.myButton.frame = CGRectMake(110.0f,200.0f,100.0f, 37.0f);

    [self.myButton  setBackgroundImage:normalImageforState:UIControlStateNormal];

    [self.myButton setBackgroundImage:highlightedImage forState:UIControlStateHighlighted];

    [self.myButton setTitle:@"Normal" forState:UIControlStateNormal];

[self.myButton setTitle:@"Pressed" forState:UIControlStateHighlighted];

 

1.手写UIButton

 

CGRect btnControlRect=CGRectMake(200, theHeight, 100, 30);

    UIButton *btnControl=[[UIButtonalloc] initWithFrame:btnControlRect];

    

  //设置按钮的背景图片

    [btnControlsetBackgroundImage:[UIImage imageNamed:@"desc_nomal.png"] forState:UIControlStateNormal];

    [btnControlsetBackgroundImage:[UIImage imageNamed:@"desc_nomal.png"] forState:UIControlStateHighlighted];

    [btnControlsetBackgroundImage:[UIImage imageNamed:@"desc_nomal.png"] forState:UIControlStateSelected];

    [btnControlsetBackgroundColor:[UIColor clearColor]];

    

    [btnControladdTarget:self action:@selector(ClickControlAction:) forControlEvents:UIControlEventTouchUpInside];

    

    [self.scrollViewaddSubview:btnControl];

    [btnControl release];

 

// 设置按钮的文本

        [_btnOrder setTitle:@"预定" forState:UIControlStateNormal];

        [_btnOrder setTitle:@"取消" forState:UIControlStateSelected];

        // 设置按钮的文本颜色

        [_btnOrder setTitleColor:[UIColor colorWithRed:50/255.0 green:50/255.0 blue:50/255.0alpha:1.0forState:UIControlStateNormal];

        [_btnOrder setTitleColor:[UIColor colorWithRed:255/255.0 green:255/255.0blue:255/255.0 alpha:1.0forState:UIControlStateSelected];

 

// 设置按钮的文本大小

 

[_btnOrder.titleLabelsetFont:[UIFont systemFontOfSize:14]];

 

 

UITextField的总结

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"

最右侧加图片是以下代码,

   UIImageView *imgv=[[UIImageView alloc] initWithImage:[UIImageimageNamed:@"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 *)textFieldshouldChangeCharactersInRange:(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 *)textFieldshouldChangeCharactersInRange:(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的delegateIBOutlet变量右键链接到前面的控制器类的实例上。或者使用代码方式,指定相关TextField的delegate变量。

 

- (void)viewDidLoad

 

{

 

   [super viewDidLoad];

 

       itemNameField.delegate = self;

 

       priceField.delegate = self;

}

UISlider滑块控件

 

一、创建

滑块是一个标准的UIControl。我们可以通过代码创建,如同开关(UISwitch)的宽与高都会被忽略一样滑块的高也会被忽略(但是宽度不会):

3. UISlider* mySlider = [ [ UISlider alloc ] initWithFrame:CGRectMake(20.0,10.0,200.0,0.0) ];//高度设为0就好    

二、设定范围与默认值

创建完毕的同时我们要设置好滑块的范围,如果你没有设置,那么会使用默认的0.0 到1.0 之间的值。UISlider提供了两个属性来设置范围:mininumValue 和 maxinumValue:

1. mySlider.mininumValue = 0.0;//下限  

2. mySlider.maxinumValue = 50.0;//上限  

同时你也可以为滑块设定一个默认值:

1. mySlider.value = 22.0;  

三、两端添加图片

滑块可以在任何一段显示图像。添加图像后会导致滑动条缩短,所以记得要记得在创建的时候增加滑块的宽度来适应图像。

1. [ mySlider setMininumTrackImage: [ UIImage applicationImageNamed:@"min.png" ] forState: UIControlStateNormal ];  

2. [ mySlider setMaxinumTrackImage: [ UIImage applicationImageNamed:@"max.png" ] forState: UIControlStateNormal ];  

你可以根据滑块的各种不同状态显示不同的图像。下面是可用状态:

UIControlStateNormal

UIControlStateHighlighted

UIControlStateDisabled

UIControlStateDisabled

UIControlStateSelected

四、显示控件

1. [ parentView addSubview:myslider ];//添加到父视图  

2. 或  

3. [ self.navigationItem.titleView addSubview:myslider ];//添加到导航栏  

五、读取控件值

1. float value = mySlider.value;  

六、通知

要想在滑块值改变时收到通知,可以用UIControl类的addTarget方法为UIControlEventValueChanged事件添加一个动作。

1. [ mySlider addTarget:self action:@selector(sliderValueChanged:) forControlEventValueChanged ];  

只要滑块停放(注意是停放,如果要在拖动中也触发,请看后文)到新的位置,你的动作方法就会被调用:

1. - (void) sliderValueChanged:(id)sender{  

2.         UISlider* control = (UISlider*)sender;  

3.         if(control == mySlider){  

4.                   float value = control.value;  

5.                    /* 添加自己的处理代码 */  

6.          }  

7. }  

如果要在拖动中也触发,需要设置滑块的 continuos 属性:

1. mySlider.continuous = YES ;  

这 个通知最简单的一个实例就是实时显示滑块的值,很奇怪的苹果显示滑块的值是一个私有的API(setShowValue),私有就私有,大不了我不用就 是。我们可以用一个UILabel来显示值,在每次触发上面的方法时改变label的值,不就可以实时显示了吗?当然我们可以做的不仅仅是这个,还有更多 的 cool 事情可以去实现,就看你的手段与想象力了。

///

如果您希望在App里引入音量调节功能,生成一个滑动条,用户拖动该控件就能调节iPhone音量--可以用uislider + nstimer
代码

[[NSNotificationCenterdefaultCenter] addObserver:self
      selector:@selector(volumeChanged:)
      name:@"AVSystemController_SystemVolumeDidChangeNotification"
      object:nil];

UISegmentedControl的所有操作总结

#import"SegmentedControlTestViewController.h" 

   @implementation SegmentedControlTestViewController 

   @synthesize segmentedControl; 

     

   /****************************************

    Tasks

   Initializing a Segmented Control

    – initWithItems:  

   Managing Segment Content

    – setImage:forSegmentAtIndex:  

    – imageForSegmentAtIndex:  

    – setTitle:forSegmentAtIndex:  

    – titleForSegmentAtIndex:  

   Managing Segments

    – insertSegmentWithImage:atIndex:animated:  

    – insertSegmentWithTitle:atIndex:animated:  

     numberOfSegments  property  

    – removeAllSegments  

    – removeSegmentAtIndex:animated:  

    selectedSegmentIndex property  

   Managing Segment Behavior and Appearance

    momentary  property  

    segmentedControlStyle property  

     tintColor property  

    – setEnabled:forSegmentAtIndex:  

    – isEnabledForSegmentAtIndex:  

    – setContentOffset:forSegmentAtIndex:  

    – contentOffsetForSegmentAtIndex:  

    – setWidth:forSegmentAtIndex:  

    – widthForSegmentAtIndex:  

   *********************************************/ 

   // Implement viewDidLoad to do additional setup after loading the view,typically from a nib. 

    -(void)viewDidLoad { 

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

       //初始化UISegmentedControl 

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

       segmentedControl = segmentedTemp; 

       segmentedControl.frame = CGRectMake(60.0, 10.0, 200.0, 50.0); 

         

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

       [segmentedControl setImage:[UIImage imageNamed:@"lan.png"]forSegmentAtIndex:3];//设置指定索引的图片 

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

       [segmentedControl insertSegmentWithTitle:@"insert" atIndex:3animated:NO];//在指定索引插入一个选项并设置题目 

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

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

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

         

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

        UIImageView *imageForSegmentAtIndex =[[UIImageView alloc]initWithImage:[segmentedControlimageForSegmentAtIndex:1]]; 

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

         

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

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

       titleForSegmentAtIndex.text = [segmentedControltitleForSegmentAtIndex:0]; 

         

       //获取总选项数segmentedControl.numberOfSegments 

       UILabel *numberOfSegments = [[UILabelalloc]initWithFrame:CGRectMake(140.0, 100.0, 30.0, 30.0)]; 

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

         

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

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

       widthForSegmentAtIndex.text = [NSStringstringWithFormat:@"%f",[segmentedControlwidthForSegmentAtIndex:2]]; 

          

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

       segmentedControl.tintColor = [UIColor redColor]; 

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

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

         

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

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

       NSLog(@"%d",enableFlag); 

         

       [self.view addSubview:widthForSegmentAtIndex]; 

       [self.view addSubview:numberOfSegments]; 

       [self.view addSubview:titleForSegmentAtIndex]; 

       [self.view addSubview:imageForSegmentAtIndex]; 

       [self.view addSubview:segmentedControl]; 

         

       [widthForSegmentAtIndex release]; 

       [numberOfSegments release]; 

       [titleForSegmentAtIndex release]; 

       [segmentedTemp release]; 

       [imageForSegmentAtIndex release]; 

         

       //移除所有选项 

        //[segmentedControlremoveAllSegments]; 

       [super viewDidLoad]; 

   } 

     

   /*

   // Override to allow orientations other than the default portraitorientation.

    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{

       // Return YES for supported orientations

       return (interfaceOrientation == UIInterfaceOrientationPortrait);

    }

   */ 

    -(void)didReceiveMemoryWarning { 

       // Releases the view if it doesn't have a superview. 

       [super didReceiveMemoryWarning]; 

         

       // Release any cached data, images, etc that aren't in use. 

   } 

    -(void)viewDidUnload { 

       // Release any retained subviews of the main view. 

       // e.g. self.myOutlet = nil; 

   } 

     

    -(void)dealloc { 

       [segmentedControl release]; 

       [super dealloc]; 

   } 

@end

使用Delegate实现不同页面间的传值

两个View之间的传值可以有多种方式。但本人觉得最合理最自然并且最安全的方式是通过Delegate方式。

 

设想一个场景:

 

1. 有两个View,分别是A和B。

 

2. 点击A中的某个按钮,出来B。

 

3. 对B做某些操作(比如输入文字到textField,选择picker等等)。

 

4. 然后点击B中的确定按钮,将在B中进行的操作所产生的数据传递给A。

 

这种应用场景在编写iPhone App应用的时候是十分常见的,比如利用modelview来进行某些条件的选择,进行注册操作等等。下面具体说说利用Delegate是如何将View B中的数据传递回View A。

 

第一步:

 

在B类的类定义之前加入一下代码,定义一个delegate:

 

[plain] view plaincopy

 

   @protocol ViewBControllerDelegate <NSObject>  

    -(void) viewAWillDoThisAction:(UIViewController *) currentView;    

   @end 

 

这个delegate定义了一个方法,所有实现了这个delegate的类都必须实现这个方法。

 

然后再在B类的类定义中添加一个member,加入以下代码:

 

[plain] view plaincopy

 

   NSObject<FilterSpotsViewControllerDelegate> *view_A; 

 

从名字来看,就知道待会这个值会被赋予View A。

 

第二步:

 

让A类实现ViewBControllerDelegate:

 

[plain] view plaincopy

 

   @interface ViewAController : UIViewController<ViewBControllerDelegate> 

 

并且让A类实现方法viewAWillDoThisAction:

 

[plain] view plaincopy

 

    -(void) viewAWillDoThisAction:(UIViewController *) view_B { 

      //利用view_B来传值。如self.a = view_B.a; 

   } 

 

 

上面代码中,将会在B类中将B类自己(self)的指针传递给view_B(见下面第四步)。这样就可以把B类的数据传递给A类了。

 

第三步:

 

就如我之前所说的,View A点某个按钮之后,出现View B。假设这个按钮对应的方法是“-(void) pushViewB: (id) sender"。那么应在这个方法中将A类自身的指针(self)传递给之前第一步在B类中定义的成员变量View_A:

 

[plain] view plaincopy

 

   -(void) pushViewB: (id) sender {    

       //初始化一个B类,view_B      

       view_B.view_A = self;   //赋值 

       //推出View B 

   } 

 

 

第四步:

 

在B类,假设在View B中做完所有操作之后,点击确定按钮,返回View A,并将数据传回给view A。假设这个确定按钮的方法是-(void)done: (id) sender。那么需要在这个方法中调用A类实现的viewAWillDoThisAction:

 

[plain] view plaincopy

 

   -(void) done: (id) sender { 

   [self.view_A viewAWillDoThisAction:self]; 

   //返回View A 

   } 

 

 

上面代码注意两个问题:第一是调用view A的实现了delegate的方法,第二是将自身的指针传递给view A的方法,以方便view A能取到view B的数据。

 

以上就是整个利用delegate机制来进行两个view之间的传值的过程。这里注意一点:这两个view之间是有关系的(view A推出view B,从view B推出view A)。对于两个完全没有关系的view,如何传值呢?理论上利用delegate也是可以的,但并不是最好的方法。最好的方法是利用NSNotification,留到日后再说。

 

多嘴一点,其实说是利用delegate的方式来传值,其本质是传递类的指针来进行类成员的传值(实现了delegate的类A将自身传给了类B,然后类B又将自身传回去给类A),之所以用到delegate的机制,只不过是为了说明这个顺序:当B进行了某个操作的时候,需要A去做另外一件事。这就是delegate的本质。也就是我文章开头所说“最合理最自然”的原因。

 

(转)UIWebView的基本用法,适合新手

 

UIWebView是iOS sdk中一个最常用的控件。是内置的浏览器控件,我们可以用它来浏览网页、打开文档等等。这篇文章我将使用这个控件,做一个简易的浏览器。如下图:

我们创建一个Window-based Application程序命名为:UIWebViewDemo

UIWebView的loadRequest可以用来加载一个url地址,它需要一个NSURLRequest参数。我们定义一个方法用来加载url。在UIWebViewDemoViewController中定义下面方法:

- (void)loadWebPageWithString:(NSString*)urlString

{

    NSURL *url =[NSURLURLWithString:urlString];

    NSLog(urlString);

    NSURLRequest *request =[NSURLRequestrequestWithURL:url];

    [webView loadRequest:request];

}

在界面上放置3个控件,一个textfield、一个button、一个uiwebview,布局如下:

在代码中定义相关的控件:webView用于展示网页、textField用于地址栏、activityIndicatorView用于加载的动画、buttonPress用于按钮的点击事件。

@interface UIWebViewDemoViewController :UIViewController<UIWebViewDelegate> {   

    IBOutlet UIWebView *webView;

    IBOutlet UITextField *textField;

    UIActivityIndicatorView *activityIndicatorView;

     

}

- (IBAction)buttonPress:(id) sender;

- (void)loadWebPageWithString:(NSString*)urlString;

@end

使用IB关联他们。

设置UIWebView,初始化UIActivityIndicatorView:

- (void)viewDidLoad

{

    [super viewDidLoad];

    webView.scalesPageToFit =YES;

    webView.delegate=self;

    activityIndicatorView =[[UIActivityIndicatorView alloc]

                             initWithFrame :CGRectMake(0.0f, 0.0f,32.0f, 32.0f)];

    [activityIndicatorView setCenter:self.view.center] ;

    [activityIndicatorViewsetActivityIndicatorViewStyle: UIActivityIndicatorViewStyleWhite] ;

    [self.view addSubview :activityIndicatorView] ;

    [self buttonPress:nil];

    // Do anyadditional setup after loading the view from its nib.

}

UIWebView主要有下面几个委托方法:

1、- (void)webViewDidStartLoad:(UIWebView*)webView;开始加载的时候执行该方法。
2、- (void)webViewDidFinishLoad:(UIWebView *)webView;加载完成的时候执行该方法。
3、- (void)webView:(UIWebView *)webViewdidFailLoadWithError:(NSError *)error;加载出错的时候执行该方法。

我们可以将activityIndicatorView放置到前面两个委托方法中。

- (void)webViewDidStartLoad:(UIWebView *)webView

{

    [activityIndicatorView startAnimating] ;

}

- (void)webViewDidFinishLoad:(UIWebView *)webView

{

    [activityIndicatorView stopAnimating];

}

buttonPress方法很简单,调用我们开始定义好的loadWebPageWithString方法就行了:

- (IBAction)buttonPress:(id) sender

{

    [textField resignFirstResponder];

    [self loadWebPageWithString:textField.text];

     

}

当请求页面出现错误的时候,我们给予提示:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

{

    UIAlertView *alterview = [[UIAlertView alloc] initWithTitle:@"" message:[error localizedDescription]  delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];

    [alterview show];

    [alterview release];

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值