基本控件的基礎(chǔ)使用

只有繼承UIControl即控件才能有addtarget action方法(ta方法)

1.UILabel(繼承:UIView)

[1].基本屬性

1.text:設(shè)置標(biāo)簽顯示文本窟赏。
2.attributedText:設(shè)置標(biāo)簽屬性文本叹阔。

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;  

3.font:設(shè)置標(biāo)簽文本字體论笔。
默認是系統(tǒng)自帶字體,大小為17伸刃。

label.font = [UIFontsystemFontOfSize:17]
label.font = [UIFont fontWithName:@"Arial" size:16];

4.textAlignment:設(shè)置標(biāo)簽文本對齊方式。

label.textAlignment = NSTextAlignmentCenter;  

5.lineBreakMode:設(shè)置標(biāo)簽文字過長時的顯示方式,這個屬性使用于label中文本的換行和截短。首先numberofLines必須設(shè)置為0,才有效果铅祸。

label.lineBreakMode = NSLineBreakByCharWrapping;以字符為顯示單位顯示,后面部分省略不顯示。  
label.lineBreakMode = NSLineBreakByClipping;剪切與文本寬度相同的內(nèi)容長度临梗,后半部分被刪除涡扼。  
label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字以……方式省略,顯示尾部文字內(nèi)容盟庞。  
label.lineBreakMode = NSLineBreakByTruncatingMiddle;中間的內(nèi)容以……方式省略吃沪,顯示頭尾的文字內(nèi)容。  
label.lineBreakMode = NSLineBreakByTruncatingTail;結(jié)尾部分的內(nèi)容以……方式省略什猖,顯示頭的文字內(nèi)容票彪。  
label.lineBreakMode = NSLineBreakByWordWrapping;以單詞為顯示單位顯示,后面部分省略不顯示卸伞。

6.enabled:設(shè)置文字內(nèi)容是否可變抹镊。
7.adjustsFontSizeToFitWidth:文字內(nèi)容自適應(yīng)標(biāo)簽寬度。
8.adjustsLetterSpacingToFitWidth:根據(jù)字母的間隔自適應(yīng)標(biāo)簽寬度荤傲,超出部分以……顯示垮耳。
9.numberOfLines:標(biāo)簽最多顯示行數(shù)。
10.minimumScaleFactor:設(shè)置最小字體遂黍,與minimumFontSize相同终佛,minimumFontSize在IOS 6后不能使用。
11.highlightedTextColor:設(shè)置文本高亮顯示顏色雾家,與highlighted一起使用铃彰。
12.shadowColor:設(shè)置文本陰影顏色。
13.shadowOffset:設(shè)置文本陰影與原文本的偏移量芯咧。

label.shadowOffset= CGSizeMake(1.0, 5.0); 

14.userInteractionEnabled:設(shè)置標(biāo)簽是否忽略或移除用戶交互牙捉。默認為NO。
15.preferredMaxLayoutWidth:優(yōu)先選擇標(biāo)簽布局的最大寬度敬飒。
16.baselineAdjustment:如果adjustsFontSizeToFitWidth屬性設(shè)置為YES邪铲,這個屬性就來控制文本基線的行為。

label4.baselineAdjustment = UIBaselineAdjustmentNone;  
UIBaselineAdjustmentAlignBaselines=0无拗,默認带到,文本最上端與中線對齊。  
UIBaselineAdjustmentAlignCenters,   文本中線與label中線對齊英染。  
UIBaselineAdjustmentNone,  文本最低端與label中線對齊揽惹。
  1. backgroundColor背景顏色
    清空背景顏色label1.backgroundColor= [UIColor clearColor];
[2].根據(jù)文本內(nèi)容自適應(yīng)大小(忽略字距/行距)
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 300, 400)];
    label.textColor = [UIColor yellowColor];
    label.backgroundColor = [UIColor greenColor];
    label.text = @"歡迎大家\n請坐,dcugdjdbvbdjjhdhckdnvnkdbnuduhsuhuhihshjhosdhvvdhsih 歡迎大家\n請坐,dcugdjdbvbdjjhdhckdnvnkdbnuduhsuhuhihshjhosdhvvdhsih歡迎大家\n請坐,dcugdjdbvbdjjhdhckdnvnkdbnuduhsuhuhihshjhosdhvvdhsih歡迎大家\n請坐,dcugdjdbvbdjjhdhckdnvnkdbnuduhsuhuhihshjhosdhvvdhsih歡迎大家\n請坐,dcugdjdbvbdjjhdhckdnvnkdbnuduhsuhuhihshjhosdhvvdhsih歡迎大家\n請坐,dcugdjdbvbdjjhdhckdnvnkdbnuduhsuhuhihshjhosdhvvdhsih歡迎大家\n請坐,dcugdjdbvbdjjhdhckdnvnkdbnuduhsuhuhihshjhosdhvvdhsih歡迎大家\n請坐,dcugdjdbvbdjjhdhckdnvnkdbnuduhsuhuhihshjhosdhvvdhsih";
    float h = [label height];
    [self.view addSubview:label];
    NSLog(@"height=%f",h);
//在類別里寫一個方法
@implementation UILabel (UILabelAutoHeight)
- (float)height{
    self.numberOfLines = 0;
    self.lineBreakMode = UILineBreakModeWordWrap;
    CGRect txtFrame = self.frame;
    NSString *str = self.text;
    NSDictionary *dic = @{NSFontAttributeName:self.font};
    float hh = [str boundingRectWithSize:CGSizeMake(txtFrame.size.width, 3000) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:dic context:nil].size.height;
    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, hh);
    return hh;
}
[3].NSMutableAttributedString使用詳解

1.NSParagraphStyleAttributeName 段落排版

NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.firstLineHeadIndent = 20; 
style.lineSpacing = 20;//行距
style.alignment = NSTextAlignmentCenter;
style.paragraphSpacing = 20;//段距
[attributedString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0,string.length)];

2.NSFontAttributeName 字體屬性
3.NSForegroundColorAttributeNam 字體顏色

該屬性所對應(yīng)的值是一個 UIColor 對象四康。該屬性用于指定一段文本的字體顏色搪搏。如果不指定該屬性,則默認為黑色箭养。
NSForegroundColorAttributeName 設(shè)置的顏色與 UILabel 的 textColor 屬性設(shè)置的顏色在地位上是相等的慕嚷,與 NSBackgroundColorAttributeName 地位上也相等,誰最后賦值,最終顯示的就是誰的顏色喝检,但是textColor屬性可以與 NSBackgroundColorAttributeName 屬性可疊加嗅辣。

4.NSBackgroundColorAttributeName 字體所在區(qū)域背景顏色

該屬性所對應(yīng)的值是一個 UIColor 對象。該屬性用于指定一段文本的背景顏色挠说。如果不指定該屬性澡谭, 默認值為nil, 透明色

5.NSLigatureAttributeName 連筆屬性

該屬性所對應(yīng)的值是一個 NSNumber 對象(整數(shù))。連體字符是指某些連在一起的字符损俭,它們采用單個的圖元符號蛙奖。0 表示沒有連體字符。1 表示使用默認的連體字符杆兵。2表示使用所有連體符號雁仲。默認值為 1(注意,iOS 不支持值為 2)琐脏。一般中文用不到攒砖,在英文中可能出現(xiàn)相鄰字母連筆的情況

6.NSKernAttributeName 字符間距

取值為 NSNumber 對象(整數(shù)),正值間距加寬日裙,負值間距變窄吹艇,值為浮點數(shù),字距屬性昂拂,默認值為0

7.NSStrikethroughStyleAttributeName 刪除線

設(shè)置刪除線受神,取值為 NSNumber 對象(整數(shù)),枚舉默認值是NSUnderlineStyleNone格侯。
NSUnderlineStyleNone 不設(shè)置刪除線
NSUnderlineStyleSingle 設(shè)置刪除線為細單實線
NSUnderlineStyleThick 設(shè)置刪除線為粗單實線
NSUnderlineStyleDouble 設(shè)置刪除線為細雙實線

8.NSStrikethroughColorAttributeName 刪除線顏色

取值為 UIColor 對象鼻听,默認值為黑色

9.NSUnderlineStyleAttributeName 下劃線

取值為 NSNumber 對象(整數(shù)),枚舉常量 NSUnderlineStyle中的值联四,與刪除線類似精算,該值指定是否在文字上加上下劃線,下劃線除了線條位置和刪除線不同外碎连,其他的都可以完全參照刪除線設(shè)置

10.NSUnderlineColorAttributeName 下劃線顏色

設(shè)置下劃線顏色,取值為 UIColor 對象驮履,默認值為黑色

11.NSStrokeWidthAttributeName 筆畫寬度

值為浮點數(shù)NSNumber鱼辙,該值改變筆畫寬度(相對于字體 size 的百分比)設(shè)置筆畫的粗細,負值填充效果玫镐,正值中空效果倒戏,正數(shù)只改變描邊寬度,負數(shù)同時改變文字的描邊和填充寬度恐似,默認為 0杜跷,即不改變。

12.NSStrokeColorAttributeName 填充部分顏色

填充部分顏色,不是字體顏色葛闷,取值為 UIColor 對象

13.NSShadowAttributeName 陰影屬性

取值為 NSShadow 對象憋槐,默認為 nil。
NSShadow *shadow=[[NSShadow alloc] init];
shadow.shadowBlurRadius=5;//模糊度
shadow.shadowColor=[UIColor yellowColor];
shadow.shadowOffset=CGSizeMake(1, 3);

14.NSObliquenessAttributeName 字形傾斜度

取值為 NSNumber (float),正值右傾淑趾,負值左傾阳仔,默認值為0,表示沒有傾斜

15.NSExpansionAttributeName 橫向拉伸屬性

取值為 NSNumber (float),正值橫向拉伸文本扣泊,負值橫向壓縮文本

16.NSVerticalGlyphFormAttributeName 文字排版方向

取值為 NSNumber 對象(整數(shù))近范,0 表示橫排文本,1 表示豎排文本,在iOS中, 總是以橫向排版延蟹,0 以外的值都未定義

17.NSTextEffectAttributeName 文本特殊效果

這個屬性的值是一個NSString對象评矩。使用此屬性指定的文字效果,如NSTextEffectLetterpressStyle阱飘。此屬性的默認值為nil斥杜,表示沒有文本效應(yīng)

18.NSBaselineOffsetAttributeName 基線偏移值

取值為 NSNumber (float),表示的字符從基線偏移的NSNumber對象,默認值是0俯萌,正值上偏果录,負值下偏

19.NSWritingDirectionAttributeName 文字書寫方向

取值為包含NSNumber對象的數(shù)組. 從左向右書寫或者從右向左書寫
[attributedString addAttribute:NSWritingDirectionAttributeName value:@[@3] range:NSMakeRange(40, 4)];

20.NSLinkAttributeName 鏈接屬性

點擊后調(diào)用瀏覽器打開指定URL地址,此屬性的值是NSURL對象(首選)或一個NSString對象咐熙,此屬性的默認值為nil弱恒,表示沒有鏈接,UILabel無法使用該屬性, 可以使用UITextView 控件

21.NSAttachmentAttributeName 文本附件

取值為NSTextAttachment對象,常用于文字圖片混排棋恼,此屬性的默認值為nil返弹,表示無附件
使用:
//創(chuàng)建NSTextAttachment的對象,用來裝載圖片
NSTextAttachment *attch = [[NSTextAttachment alloc] init];
//將NSTextAttachment對象的image屬性設(shè)置為想要使用的圖片
attch.image = [UIImage imageNamed:@"lock_wallpaper.jpeg"];
//設(shè)置NSTextAttachment對象bounds大小爪飘,也就是要顯示的圖片的大小
attch.bounds = CGRectMake(0, 0, 50, 50);
// 創(chuàng)建帶有圖片的富文本
NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attch];
//插入文本指定位置
[attributedString insertAttributedString:string atIndex:7];
//插入文本末尾
[attributedString appendAttributedString:string];

以上部分資料特別感謝http://www.reibang.com/p/8c7dd7d8501b

2.UIButton的使用(繼承:UIControl)

//設(shè)置自定義的按鈕
UIButton *button1=[UIButton buttonWithType:UIButtonTypeCustom];
UIButton *button1 = [[UIButton alloc] initWithFrame:CGRectMake(150, 150,100, 100)];
//設(shè)置一個圓角的按鈕
UIButton *button1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
// 能夠定義的button類型有以下6種义起,
// typedef enum {
// UIButtonTypeCustom = 0, 自定義風(fēng)格
// UIButtonTypeRoundedRect, 圓角矩形 
// UIButtonTypeDetailDisclosure, 藍色小箭頭按鈕,主要做詳細說明用
// UIButtonTypeInfoLight, 亮色感嘆號
// UIButtonTypeInfoDark, 暗色感嘆號
// UIButtonTypeContactAdd, 十字加號按鈕
// } UIButtonType;
//按鈕的位置坐標(biāo)
button1.frame=CGRectMake(80,250,250, 30);
//普通狀態(tài)按鈕標(biāo)題
[button1 setTitle:@"Button1" forState:UIControlStateNormal];
//高亮狀態(tài)的按鈕標(biāo)題
[button1 setTitle:@"高亮狀態(tài)" forState:UIControlStateHighlighted];//
//高亮狀態(tài)光暈效果
[button1 setShowsTouchWhenHighlighted:YES];
//設(shè)置標(biāo)題的顏色
[button1 setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
//設(shè)置標(biāo)題的字體大小
[button1.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
button1.titleLabel.font = [UIFont systemFontOfSize:16];
//設(shè)置背景顏色
[button1 setBackgroundColor:[UIColor blueColor]];
//圖片被拉伸式地設(shè)置背景圖片
[button1 setBackgroundImage:[UIImage imageNamed:@"1.jpg"] forState:UIControlStateNormal];
//圖片保持原來大小地設(shè)置背景圖片
[button1 setImage:[UIImage imageNamed:@"1.jpg"] forState:UIControlStateNormal];
[[button1 titleLabel]setShadowColor:[UIColor blackColor]];
[[button1 titleLabel]setShadowOffset:CGSizeMake(-0.5, -0.5)];
button1.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;
[self.view addSubview:button1];
//監(jiān)聽事件
[button1 addTarget:self action:@selector(Click_Button) forControlEvents:UIControlEventTouchUpInside];
}
-(void)Click_Button
{
NSLog(@"已點擊...");
}
/*
* 默認情況下师崎,當(dāng)按鈕高亮的情況下默终,圖像的顏色會被畫深一點,如果這下面的這個屬性設(shè)置為no犁罩,
* 那么可以去掉這個功能
*/
button1.adjustsImageWhenHighlighted = NO;
/*跟上面的情況一樣齐蔽,默認情況下,當(dāng)按鈕禁用的時候床估,圖像會被畫得深一點含滴,設(shè)置NO可以取消設(shè)置*/
button1.adjustsImageWhenDisabled = NO;
/* 下面的這個屬性設(shè)置為yes的狀態(tài)下,按鈕按下會發(fā)光*/
button1.showsTouchWhenHighlighted = YES;

UIButton事件
UIControlEventTouchDown
單點觸摸按下事件:用戶點觸屏幕丐巫,或者又有新手指落下的時候谈况。
UIControlEventTouchDownRepeat
多點觸摸按下事件勺美,點觸計數(shù)大于1:用戶按下第二、三碑韵、或第四根手指的時候赡茸。
UIControlEventTouchDragInside
當(dāng)一次觸摸在控件窗口內(nèi)拖動時。
UIControlEventTouchDragOutside
當(dāng)一次觸摸在控件窗口之外拖動時泼诱。
UIControlEventTouchDragEnter
當(dāng)一次觸摸從控件窗口之外拖動到內(nèi)部時坛掠。
UIControlEventTouchDragExit
當(dāng)一次觸摸從控件窗口內(nèi)部拖動到外部時。
UIControlEventTouchUpInside
所有在控件之內(nèi)觸摸抬起事件治筒。
UIControlEventTouchUpOutside
所有在控件之外觸摸抬起事件(點觸必須開始與控件內(nèi)部才會發(fā)送通知)屉栓。
UIControlEventTouchCancel
所有觸摸取消事件,即一次觸摸因為放上了太多手指而被取消耸袜,或者被上鎖或者電話呼叫打斷友多。
UIControlEventTouchChanged
當(dāng)控件的值發(fā)生改變時,發(fā)送通知堤框。用于滑塊域滥、分段控件、以及其他取值的控件蜈抓。你可以配置滑塊控件何時發(fā)送通知启绰,在滑塊被放下時發(fā)送,或者在被拖動時發(fā)送沟使。
UIControlEventEditingDidBegin
當(dāng)文本控件中開始編輯時發(fā)送通知委可。
UIControlEventEditingChanged
當(dāng)文本控件中的文本被改變時發(fā)送通知。
UIControlEventEditingDidEnd
當(dāng)文本控件中編輯結(jié)束時發(fā)送通知腊嗡。
UIControlEventEditingDidOnExit
當(dāng)文本控件內(nèi)通過按下回車鍵(或等價行為)結(jié)束編輯時着倾,發(fā)送通知。
UIControlEventAlltouchEvents
通知所有觸摸事件燕少。
UIControlEventAllEditingEvents
通知所有關(guān)于文本編輯的事件卡者。
UIControlEventAllEvents
通知所有事件。

3.UITextfield的使用(繼承:UIControl)

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20,240,200,30)];
    textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
    textField.keyboardType = UIKeyboardTypeNamePhonePad;
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.delegate = self;
    textField.returnKeyType = UIReturnKeyDone;
    textField.secureTextEntry = NO;
    textField.clearButtonMode = UITextFieldViewModeAlways;
    textField.textColor = [UIColor redColor];
    textField.font = [UIFont boldSystemFontOfSize:14];
    [self.view addSubview:textField];
//隱藏鍵盤方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
}
(1) 初始化textfield并設(shè)置位置及大小

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

(2) 設(shè)置邊框樣式客们,只有設(shè)置了才會顯示邊框樣式
text.borderStyle = UITextBorderStyleRoundedRect;
typedef enum {
UITextBorderStyleNone, 
UITextBorderStyleLine,
UITextBorderStyleBezel,
UITextBorderStyleRoundedRect  
} UITextBorderStyle;
(3) 設(shè)置輸入框的背景顏色崇决,此時設(shè)置為白色 如果使用了自定義的背景圖片邊框會被忽略掉

text.backgroundColor = [UIColor whiteColor];

(4) 設(shè)置背景

注意: 只有在 UITextBorderStyleNone 樣式下,設(shè)置背景圖才會生效底挫,且圖片大小小于 text 的frame時嗽桩,圖片會拉伸
text.background = [UIImage imageNamed:@"dd.png"];

(5) 設(shè)置背景

設(shè)置enable為NO 時的背景圖片
text.disabledBackground = [UIImage imageNamed:@"cc.png"];

(6)當(dāng)輸入框沒有內(nèi)容時,水印提示 提示內(nèi)容為password

text.placeholder = @"password";

(7) 設(shè)置輸入框內(nèi)容的字體樣式和大小

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

(8) 設(shè)置字體顏色

text.textColor = [UIColor redColor];

(9)輸入框中是否有個叉號凄敢,在什么時候顯示,用于一次性刪除輸入框中的內(nèi)容
text.clearButtonMode = UITextFieldViewModeAlways;
typedef enum {
UITextFieldViewModeNever, 從不出現(xiàn)
UITextFieldViewModeWhileEditing, 編輯時出現(xiàn)
UITextFieldViewModeUnlessEditing, 除了編輯外都出現(xiàn)
UITextFieldViewModeAlways  一直出現(xiàn)
} UITextFieldViewMode;
(10)輸入框中一開始就有的文字

text.text = @"一開始就在輸入框的文字";

(11) 每輸入一個字符就變成點 用密碼輸入

text.secureTextEntry = YES;

(12) 是否糾錯
typedef enum {
UITextAutocorrectionTypeDefault, 默認
UITextAutocorrectionTypeNo,  不自動糾錯
UITextAutocorrectionTypeYes, 自動糾錯
} UITextAutocorrectionType;
(14)再次編輯就清空

text.clearsOnBeginEditing = YES;

(15) 內(nèi)容對齊方式

text.textAlignment = UITextAlignmentLeft;

(16) 內(nèi)容的垂直對齊方式

text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

(17) 設(shè)置為YES時文本會自動縮小以適應(yīng)文本窗口大小.默認是保持原來大小,而讓長文本滾動

textFied.adjustsFontSizeToFitWidth = YES;

(18) 設(shè)置自動縮小顯示的最小字體大小湿痢,adjustsFontSizeToFitWidth為YES才會起作用

text.minimumFontSize = 20;

(19) 設(shè)置鍵盤的樣式
text.keyboardType = UIKeyboardTypeNumberPad;
typedef enum {
UIKeyboardTypeDefault,      默認鍵盤涝缝,支持所有字符         
UIKeyboardTypeASCIICapable, 支持ASCII的默認鍵盤
UIKeyboardTypeNumbersAndPunctuation, 標(biāo)準(zhǔn)電話鍵盤扑庞,支持+*#字符
UIKeyboardTypeURL,            URL鍵盤,支持.com按鈕 只支持URL字符
UIKeyboardTypeNumberPad,             數(shù)字鍵盤
UIKeyboardTypePhonePad,   電話鍵盤
UIKeyboardTypeNamePhonePad,  電話鍵盤拒逮,也支持輸入人名
UIKeyboardTypeEmailAddress,  用于輸入電子 郵件地址的鍵盤     
UIKeyboardTypeDecimalPad,    數(shù)字鍵盤 有數(shù)字和小數(shù)點
UIKeyboardTypeTwitter,       優(yōu)化的鍵盤罐氨,方便輸入@、#字符
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, 
} UIKeyboardType;
(20) 首字母是否大寫
text.autocapitalizationType = UITextAutocapitalizationTypeNone;
typedef enum {
UITextAutocapitalizationTypeNone, 不自動大寫
UITextAutocapitalizationTypeWords, 單詞首字母大寫
UITextAutocapitalizationTypeSentences, 句子的首字母大寫
UITextAutocapitalizationTypeAllCharacters, 所有字母都大寫
} UITextAutocapitalizationType;
(21) return鍵變成什么鍵
text.returnKeyType =UIReturnKeyDone;
typedef enum {
UIReturnKeyDefault, 默認 灰色按鈕滩援,標(biāo)有Return
UIReturnKeyGo,     標(biāo)有Go的藍色按鈕
UIReturnKeyGoogle,標(biāo)有Google的藍色按鈕栅隐,用語搜索
UIReturnKeyJoin,標(biāo)有Join的藍色按鈕
UIReturnKeyNext,標(biāo)有Next的藍色按鈕
UIReturnKeyRoute,標(biāo)有Route的藍色按鈕
UIReturnKeySearch,標(biāo)有Search的藍色按鈕
UIReturnKeySend,標(biāo)有Send的藍色按鈕
UIReturnKeyYahoo,標(biāo)有Yahoo的藍色按鈕
UIReturnKeyEmergencyCall, 緊急呼叫按鈕
} UIReturnKeyType;
(22) 鍵盤外觀
textView.keyboardAppearance=UIKeyboardAppearanceDefault;
typedef enum {
UIKeyboardAppearanceDefault玩徊, 默認外觀租悄,淺灰色
UIKeyboardAppearanceAlert,   深灰 石墨色
} UIReturnKeyType;
(23) 設(shè)置代理 用于實現(xiàn)協(xié)議

text.delegate = self;

(24) 把textfield加到視圖中

[self.window addSubview:text];

(25) 最右側(cè)加圖片是以下代碼  左側(cè)類似
UIImageView *image=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]];
text.rightView=image;
text.rightViewMode = UITextFieldViewModeAlways; 
typedef enum {
UITextFieldViewModeNever,
UITextFieldViewModeWhileEditing,
UITextFieldViewModeUnlessEditing,
UITextFieldViewModeAlways
} UITextFieldViewMode;
(26) 按return鍵鍵盤往下收 becomeFirstResponder

類要采用UITextFieldDelegate協(xié)議
text.delegate = self; 聲明text的代理是我恩袱,我會去實現(xiàn)把鍵盤往下收的方法 這個方法在UITextFieldDelegate里所以我們要采用UITextFieldDelegate這個協(xié)議

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
 [text resignFirstResponder];    //主要是[receiver resignFirstResponder]在哪調(diào)用就能把receiver對應(yīng)的鍵盤往下收
 return YES;
}
(27) 重寫繪制行為

除了UITextField對象的風(fēng)格選項泣棋,你還可以定制化UITextField對象,為他添加許多不同的重寫方法畔塔,來改變文本字段的顯示行為潭辈。這些方法都會返回一個CGRect結(jié)構(gòu),制定了文本字段每個部件的邊界范圍澈吨。以下方法都可以重寫把敢。

– textRectForBounds:     //重寫來重置文字區(qū)域
– drawTextInRect:         //改變繪文字屬性.重寫時調(diào)用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數(shù),就不用調(diào)用super了.
– placeholderRectForBounds:  //重寫來重置占位符區(qū)域
– drawPlaceholderInRect:  //重寫改變繪制占位符屬性.重寫時調(diào)用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數(shù)谅辣,就不用調(diào)用super了.
– borderRectForBounds:  //重寫來重置邊緣區(qū)域
– editingRectForBounds:  //重寫來重置編輯區(qū)域
– clearButtonRectForBounds:  //重寫來重置clearButton位置,改變size可能導(dǎo)致button的圖片失真
– leftViewRectForBounds:
– rightViewRectForBounds:
(28) 委托方法
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
//返回一個BOOL值修赞,指定是否喚起文本字段開始編輯,返回NO時不能喚起鍵盤進行編輯
return YES; 
} 
- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
 //開始編輯時觸發(fā),文本字段將成為first responder 
} 
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ 
//返回BOOL值屈藐,指定是否允許文本字段結(jié)束編輯榔组,當(dāng)編輯結(jié)束,文本字段會讓出first responder 
//要想在用戶結(jié)束編輯時阻止文本字段消失联逻,可以返回NO 
//這對一些文本字段必須始終保持活躍狀態(tài)的程序很有用搓扯,比如即時消息 
return NO; //一直處于編輯狀態(tài)
} 
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
//當(dāng)用戶使用自動更正功能,把輸入的文字修改為推薦的文字時包归,就會調(diào)用這個方法锨推。 
//這對于想要加入撤銷選項的應(yīng)用程序特別有用 
//可以跟蹤字段內(nèi)所做的最后一次修改公壤,也可以對所有編輯做日志記錄,用作審計用途换可。   
//要防止文字被改變可以返回NO 
//這個方法的參數(shù)中有一個NSRange對象厦幅,指明了被改變文字的位置沾鳄,建議修改的文本也在其中 
 return YES; 
} 
- (BOOL)textFieldShouldClear:(UITextField *)textField{ 
//返回一個BOOL值指明是否允許根據(jù)用戶請求清除內(nèi)容 
//可以設(shè)置在特定條件下才允許清除內(nèi)容 
return YES; //返回YES,輸入內(nèi)容后确憨,點擊右邊的清除按鈕可以清除译荞,返回NO瓤的,點擊清除不起作用
} 
-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
//返回一個BOOL值,指明是否允許在按下回車鍵時結(jié)束編輯 
//如果允許要調(diào)用resignFirstResponder 方法吞歼,這會導(dǎo)致結(jié)束編輯圈膏,而鍵盤會被收起[textField resignFirstResponder];
//查一下resign這個單詞的意思就明白這個方法了 
return YES; 
} 
(29) 通知

UITextField派生自UIControl,所以UIControl類中的通知系統(tǒng)在文本字段中也可以使用篙骡。除了UIControl類的標(biāo)準(zhǔn)事件稽坤,你還可以使用下列UITextField類特有的事件
只有這三個
UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification
當(dāng)文本字段退出編輯模式時觸發(fā)。通知的object屬性存儲了最終文本糯俗。
因為文本字段要使用鍵盤輸入文字尿褪,所以下面這些事件發(fā)生時,也會發(fā)送動作通知
UIKeyboardWillShowNotification  //鍵盤顯示之前發(fā)送
UIKeyboardDidShowNotification  //鍵盤顯示之后發(fā)送
UIKeyboardWillHideNotification  //鍵盤隱藏之前發(fā)送
UIKeyboardDidHideNotification  //鍵盤隱藏之后發(fā)送

(30) 限制只能輸入特定的字符
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSCharacterSet *cs;
//invertedSet方法是去反字符,把所有的除了NUMBERS 里的字符都找出來(包含去空格功能)
cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet];
// componentsJoinedByString 用于根據(jù)一個字符串來將數(shù)組連接成一個新的字符串叶骨。
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; //按cs分離出數(shù)組,數(shù)組按@""分離出字符串
BOOL canChange = [string isEqualToString:filtered];
return canChange;
//這樣寫了以后茫多,輸入非數(shù)字時不能輸入
}

//上面那個NUMBERS是一個宏,可以在文件頂部定義:
#define NUMBERS @”0123456789n”(這個代表可以輸入數(shù)字和換行忽刽,請注意這個n天揖,如果不寫這個,Done按鍵將不會觸發(fā)跪帝,如果用在SearchBar中今膊,將會不觸發(fā)Search事件,因為你自己限制不讓輸入n伞剑,好慘斑唬,我在項目中才發(fā)現(xiàn)的。)
所以黎泣,如果你要限制輸入英文和數(shù)字的話恕刘,就可以把這個定義為:
#define kAlphaNum @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。
當(dāng)然抒倚,你還可以在以上方法return之前褐着,做一提示的,比如提示用戶只能輸入數(shù)字之類的托呕。如果你覺得有需要的話含蓉。

(31) 限制只能輸入一定長度的字符
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 
{ //string就是此時輸入的那個字符 textField就是此時正在輸入的那個輸入框 返回YES就是可以改變輸入框的值 NO相反
if ([string isEqualToString:@"n"]) //按會車可以改變 這里這個字符寫什么,就只能輸入什么
{ 
return YES; 
} 
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到輸入框的內(nèi)容
if (self.myTextField == textField) //判斷是否時我們想要限定的那個輸入框
{ 
if ([toBeString length] > 20) { //如果輸入框內(nèi)容大于20則彈出警告
textField.text = [toBeString substringToIndex:20]; 
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:@"超過最大字?jǐn)?shù)不能輸入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] autorelease]; 
[alert show]; 
/*
UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"提示"message:@"超過最大字?jǐn)?shù)不能輸入了" preferredStyle:UIAlertControllerStyleActionSheet];
[self presentViewController:alertViewanimated:YEScompletion:nil];
*/
return NO; 
} 
} 
return YES; 
}

4.UISlider的使用(繼承UIControl)

 UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(100, 100, 200, 66)];//這里無論高度設(shè)為多少项郊,都按其自己的默認高度顯示  
slider.minimumValue = 0;
slider.maximumValue = 1;
slider.value = 0.5;
slider.continuous = YES;//默認YES  如果設(shè)置為NO馅扣,則每次滑塊停止移動后才觸發(fā)事件  
[slider addTarget:self action:@selector(changed:) forControlEvents:UIControlEventValueChanged];
//給滑塊,最小值一邊着降,最大值一邊配置顏色
slider.minimumTrackTintColor = [UIColor redColor];  
slider.maximumTrackTintColor = [UIColor yellowColor];  
slider.thumbTintColor = [UIColor purpleColor];   
//給滑塊最大值差油、最小值一邊設(shè)置圖片
UIImage * image1 = [UIImage imageNamed:@"apple.jpg"];  
UIImage * image2 = [UIImage imageNamed:@"dog.png"];  
slider.minimumValueImage = image1;  
slider.maximumValueImage = image2;  
//手動設(shè)置滑塊的值,并是否動畫移動過去
- (void)setValue:(float)value animated:(BOOL)animated; 
- (void)setThumbImage:(nullable UIImage *)image forState:(UIControlState)state; //給滑動按鈕設(shè)置圖片  
- (void)setMinimumTrackImage:(nullable UIImage *)image forState:(UIControlState)state;//給滑道左側(cè)設(shè)置圖片  
- (void)setMaximumTrackImage:(nullable UIImage *)image forState:(UIControlState)state;//給滑道右側(cè)設(shè)置圖片

可以自定義一個類繼承自UISlider任洞,然后重寫這些方法厌殉,返回自定義的滑塊的各個區(qū)域的大小

- (CGRect)minimumValueImageRectForBounds:(CGRect)bounds;  //返回左邊圖片大小  
- (CGRect)maximumValueImageRectForBounds:(CGRect)bounds;  //返回右邊圖片大小  
- (CGRect)trackRectForBounds:(CGRect)bounds;              //返回滑道大小  
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value;  //返回滑塊大小  

5.UISwitch的使用(繼承:UIControl)

UISwitch *ss = [[UISwitch alloc] initWithFrame:CGRectMake(100, 100, 60, 30)];
[ss addTarget:self action:@selector(kg:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:ss];

tintColor:
開關(guān)處于關(guān)閉狀態(tài)時邊框的顏色(注意這邊是邊框的顏色)
onTintColor:
開關(guān)處于開啟狀態(tài)時的顏色
thumbTintColor:
開關(guān)的狀態(tài)鈕顏色


image

調(diào)整UISwitch 大小

UISwitch *sw = [[UISwitch alloc]initWithFrame:CGRectMake(200, 15, 50, 15)];
     sw.transform = CGAffineTransformMakeScale( 0.5, 0.5);//縮放 
1.1 CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
這個方法可以方便的對view的長和寬進行縮放食绿,不改變view的中心點。注意公罕!中心點不變指的是物理位置不變,不是坐標(biāo)耀销,因為坐標(biāo)系此時已經(jīng)發(fā)生改變

1.2 CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)
這個方法同樣是view的長和寬進行縮放楼眷,效果類似CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)不同的是這個方法可以疊加其他CGAffineTransform效果(比如旋轉(zhuǎn))

以上資料特別感謝http://www.reibang.com/p/e6ef6eb04c6a

6.UIAlertController的使用( 對話框繼承的是UIViewController ,不是UIControl)

/* 
 類方法快速創(chuàng)建一個提示控制器 值得注意的是這個控制器有個preferreStyle屬性你可以根據(jù)這個屬性來確定是使用UIAlertView 還是 UIActionSheet 
UIAlertControllerStyleActionSheet
UIAlertControllerStyleAlert
*/
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"顯示的標(biāo)題" message:@"標(biāo)題的提示信息" preferredStyle:UIAlertControllerStyleAlert];
 [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"點擊取消");
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"點擊確認");
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"警告" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"點擊警告");
}]];
[alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
NSLog(@"添加一個textField就會調(diào)用 這個block");
}];
// 由于它是一個控制器 直接modal出來就好了
[self presentViewController:alertController animated:YES completion:nil];

7.UISegmentedControl的使用(繼承:UIControl)

    //聲明對象
    @property (nonatomic,strong) UISegmentedControl *segmentedcontrol;
    //標(biāo)題
    NSArray *segmentArry = [NSArray arrayWithObjects:@"中國",@"美國",@"大不列顛英國",@"俄羅斯", nil];
    //初始化
    self.segmentedcontrol = [[UISegmentedControl alloc] initWithItems:segmentArry];
    //iOS 7.0后被棄用
    //self.segmentedcontrol.segmentedControlStyle = UISegmentedControlStylePlain;
    self.segmentedcontrol.frame = CGRectMake(20, 40, self.view.frame.size.width-40, 30);
    //默認值為NO熊尉,即點擊后保持選中狀態(tài)罐柳,如果設(shè)置為YES則,只是短暫的顯示選中狀態(tài)
    self.segmentedcontrol.momentary = YES;
    //指示控件是否根據(jù)其內(nèi)容寬度來調(diào)整片段寬度
    self.segmentedcontrol.apportionsSegmentWidthsByContent = YES;
    //設(shè)置UISegmentedControl的邊框狰住、分割線张吉、文字、點擊后的顏色
    self.segmentedcontrol.tintColor = [UIColor blueColor];
    //通過Attribute字符串屬性字典設(shè)置Segment標(biāo)簽屬性(正常狀態(tài)下)
    [self.segmentedcontrol setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15.0],NSForegroundColorAttributeName:[UIColor purpleColor]} forState:UIControlStateNormal];
    //通過Attribute字符串屬性字典設(shè)置Segment標(biāo)簽屬性(選中狀態(tài)下)
     [self.segmentedcontrol setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15.0],NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateSelected];
    //添加事件
    [self.segmentedcontrol addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
    //UISegmentedControl的段數(shù)
    NSInteger totelindext = self.segmentedcontrol.numberOfSegments;
    //當(dāng)前選中Segment
    NSInteger selectindext = self.segmentedcontrol.selectedSegmentIndex;
    NSLog(@"共分:%ld段,當(dāng)前選中:%ld段",totelindext,selectindext);
    //指定索引點插入新標(biāo)題
    [self.segmentedcontrol insertSegmentWithTitle:@"德國" atIndex:selectindext animated:YES];
    //指定索引點插入新圖片
    [self.segmentedcontrol insertSegmentWithImage:[UIImage imageNamed:@"flag"] atIndex:selectindext animated:YES];
    //移除指定Segment
    [self.segmentedcontrol removeSegmentAtIndex:selectindext+1 animated:YES];
    //移除全部Segment
    [self.segmentedcontrol removeAllSegments];
    //設(shè)置指定Segment的標(biāo)題
    [self.segmentedcontrol setTitle:@"日本" forSegmentAtIndex:0];
    //返回指定Segment的標(biāo)題
    NSString *segmentTitle = [self.segmentedcontrol titleForSegmentAtIndex:0];
    NSLog(@"索引為:0的標(biāo)題設(shè)置為:%@",segmentTitle);
    //設(shè)置指定Segment的image
    [self.segmentedcontrol setImage:[UIImage imageNamed:@"flag"] forSegmentAtIndex:0];
    //返回指定Segment的image
    UIImage *segmentImage = [self.segmentedcontrol imageForSegmentAtIndex:0];
    NSLog(@"索引為:0的圖片設(shè)置為:%@",segmentImage);
    //設(shè)置指定Segment的寬度 默認(0催植,0)自適應(yīng)
    [self.segmentedcontrol setWidth:100 forSegmentAtIndex:0];
    //返回指定Segment的寬度
    CGFloat segmentW = [self.segmentedcontrol widthForSegmentAtIndex:0];
    NSLog(@"索引為:0的Segment寬度設(shè)置為:%.2f",segmentW);
    //設(shè)置指定Segment的偏移量
    [self.segmentedcontrol setContentOffset:CGSizeMake(5.0, 2.0) forSegmentAtIndex:0];
    //獲取指定Segment的偏移量
    CGSize segmentSize = [self.segmentedcontrol contentOffsetForSegmentAtIndex:0];
    NSLog(@"索引為:0的Segment偏移量設(shè)置為:%@", NSStringFromCGSize(segmentSize));
    //設(shè)置指定Segment是否有效
    [self.segmentedcontrol setEnabled:YES forSegmentAtIndex:0];
    //返回指定Segment是否有效
    BOOL segmentBool = [self.segmentedcontrol isEnabledForSegmentAtIndex:0];
    NSLog(@"索引為:0的Segment當(dāng)前是否可以點擊:%@",segmentBool ? @"可以":@"不可以");

8.UISearchBar

UISearchBar *mySearchBar;
UITextField *searchField;//搜索文字區(qū)域
mySearchBar.backgroundImage = [[UIImage alloc] init];
mySearchBar.barTintColor = [UIColor whiteColor];
searchField = [mySearchBar valueForKey:@"searchField"];
    if (searchField) {
        [searchField setBackgroundColor:[UIColor whiteColor]];
        searchField.frame = CGRectMake(8, 0, Fit3XSizeW(1064)-16, Fit3XSizeH(196));
        searchField.layer.cornerRadius = searchField.height*0.26;
        searchField.layer.borderColor = kTileBlackColor.CGColor;
        searchField.layer.borderWidth = kMyBorderWidth;
        searchField.layer.masksToBounds = YES;
     }
//修正光標(biāo)顏色
[searchField setTintColor:[UIColor blackColor]];
[mySearchBar changeLeftPlaceholder:@"搜索"];

9.UIScrollView

    // 1. 默認 CGSizeZero == CGSizeMake(0, 0)
    // contentSize 設(shè)置可以滾動的范圍
    scrollView.contentSize = CGSizeMake(1000, 1000);
    // 2. 默認 CGPointZero
    // contentOffset 偏移量, 滾動的位置
    // 不設(shè)置contentSize, contentOffset也可以改變
    // 問題: 改變contentOffset什么變了?
    // 答案: 改變contentOffset, 實質(zhì)上是對scrollView的bounds進行了改變.(改變子視圖的坐標(biāo))
    NSLog(@"scrollView frame is : %@", NSStringFromCGRect(scrollView.frame));
    NSLog(@"scrollView bounds is : %@", NSStringFromCGRect(scrollView.bounds));
    scrollView.contentOffset = CGPointMake(0, 500);
    NSLog(@"scrollView frame is : %@", NSStringFromCGRect(scrollView.frame));
    NSLog(@"scrollView bounds is : %@", NSStringFromCGRect(scrollView.bounds));
    // 3. contentInset
    // 添加滾動區(qū)域四周的滾動范圍
    // UIEdgeInsets age = {10, 10, 10, 10};
    scrollView.contentInset = UIEdgeInsetsMake(10, 10, 10, 10);
    // 4. directionalLockEnabled
    // 鎖定垂直或水平滾動(45度角, 鎖會失效)
    scrollView.directionalLockEnabled = YES;
    // 5. bounces 回彈效果
    // 邊緣彈動動畫關(guān)閉 NO
    // scrollView.bounces = NO;
    // 6. alwaysBounceVertical 在沒有垂直方向的滾動范圍時(0), 保證垂直方向的回彈效果
    scrollView.alwaysBounceVertical = YES;
    // 7. alwaysBounceHorizontal 在沒有水平方向的滾動范圍時(0), 保證垂直方向的回彈效果
    scrollView.alwaysBounceHorizontal = YES;
    // 8. pagingEnabled 按頁滾動
    scrollView.pagingEnabled = YES;
    // 9. scrollEnabled 滾動視圖能否滾動, 默認為YES, NO(不可以滾)
    scrollView.scrollEnabled = YES;
    // 10. showsHorizontalScrollIndicator 是否顯示水平滾動指示器
    scrollView.showsHorizontalScrollIndicator = YES;
    // 11. showsVerticalScrollIndicator 是否顯示垂直滾動的指示器
    scrollView.showsVerticalScrollIndicator = YES;
    // 12. 滾動指示器的邊距
    scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 100, 0, 0);
    // 13. indicatorStyle 滾動指示器的顏色(深色背景丶淺色背景)
    scrollView.indicatorStyle = UIScrollViewIndicatorStyleBlack;
    // 14.
    // scrollView.tracking 用戶有沒有開始拖動
    // scrollView.tracking
    // scrollView.dragging 用戶是否正在拖動
    // scrollView.dragging
    // scrollView.decelerating 是否減速中
    // scrollView.decelerating
    // 14. scrollsToTop 滾動視圖, 雙擊狀態(tài)欄手勢是否存在
    scrollView.scrollsToTop = NO;
    // 15. 代理
    scrollView.delegate = self;
    // 16. 鍵盤消失模式(一般用這個UIScrollViewKeyboardDismissModeOnDrag)
    scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
    // 測試:
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 300, kScreenWidth - 20, 200)];
    textField.backgroundColor = [UIColor cyanColor];
    [scrollView addSubview:textField];
    // 17. 縮放系數(shù)
    // 如果想進行視圖放大縮小, 必須實現(xiàn)viewForZoomingInScrollview:
    scrollView.minimumZoomScale = 2;
    scrollView.maximumZoomScale = 6;
}
// 與其想要縮放的子視圖綁定, scrollView的contentSize會跟隨這個子視圖改變
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return scrollView.subviews.firstObject;
}
// 滾動視圖滾動, 就會執(zhí)行
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    // tracking 用戶觸摸
    if (scrollView.tracking) {
        NSLog(@"正在拖動滾動");
    } else {
          NSLog(@"自己滾動中");
    }
    // dragging 用戶開始滑動
    if (scrollView.dragging) {
        NSLog(@"");
    }
    // decelerating 用戶觸摸結(jié)束
    if (scrollView.decelerating) {
        NSLog(@"");
    }
}
// 將要開始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
   // NSLog(@"開始拖拽");
}
// 將要結(jié)束拖拽
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    
}
// 將要開始進行減速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
   // NSLog(@"開始減速");
}
// 已經(jīng)結(jié)束減速
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    //NSLog(@"結(jié)束減速");
}

10.UIWebView

1.UIWebView的基礎(chǔ)使用
1肮蛹、創(chuàng)建UIWebView:
 CGRect bouds = [[UIScreen manScreen]applicationFrame];
 UIWebView* webView = [[UIWebView alloc]initWithFrame:bounds];
 [self.view addSubview:webView];

2、設(shè)置UIWebView的相關(guān)屬性:
 webView.scalespageToFit = YES;//自動對頁面進行縮放以適應(yīng)屏幕
 webView.detectsPhoneNumbers = YES;//自動檢測網(wǎng)頁上的電話號碼创南,單擊可以撥打
注意:我們在一個頁面想撥打電話的時候伦忠,也可以調(diào)取webview撥打電話
 UIWebView*callWebview =[[UIWebView alloc] init];
 NSURL *telURL =[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",self.usersModel.mobile]];// 貌似tel:// 或者 tel: 都行
 [callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
       //記得添加到view上
 [self.view addSubview:callWebview];

3、加載內(nèi)容:
 3.1稿辙、加載一個網(wǎng)頁url:
  NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];//創(chuàng)建URL
  NSURLRequest* request = [NSURLRequest requestWithURL:url];//創(chuàng)建
  [webView loadRequest:request];//加載
 3.2昆码、加載一個本地資源:
  NSURL* url = [NSURL fileURLWithPath:filePath];//創(chuàng)建URL
  NSURLRequest* request = [NSURLRequest requestWithURL:url];//創(chuàng)建
 [webView loadRequest:request];//加載
 設(shè)置webView的一些屬性
 [webView goBack];//后退
 [webView goForward];//控制前進
 [webView reload];//重載
 [webView stopLoading];//取消載入內(nèi)容

4、UIWebView的代理:
-(void)webViewDidStartLoad:(UIWebView*)webView ;//當(dāng)網(wǎng)頁視圖已經(jīng)開始加載一個請求后邻储,得到通知赋咽。
-(void)webViewDidFinishLoad:(UIWebView*)webView ;//當(dāng)網(wǎng)頁視圖結(jié)束加載一個請求之后,得到通知吨娜。
-(void)webView:(UIWebView*)webView DidFailLoadWithError:(NSError*)error;//當(dāng)在請求加載中發(fā)生錯誤時脓匿,得到通知。會提供一個NSSError對象萌壳,以標(biāo)識所發(fā)生錯誤類型亦镶。
2.加載UIWebView需要注意的點
1、處理UIWebView加載網(wǎng)頁展示doc袱瓮、txt缤骨、xls等等的文檔亂碼問題:
 1.1   處理展示txt文檔亂碼問題:
   if ([theType isEqualToString:@".txt"]){
//txt分帶編碼和不帶編碼兩種,帶編碼的如UTF-8格式txt,不帶編碼的如ANSI格式txt尺借。不帶的绊起,可以依次嘗試GBK和GB18030編碼
    NSString* aStr = [[NSString alloc] initWithData:attachmentData encoding:NSUTF8StringEncoding];
    if (!aStr){
      //用GBK進行編碼
      aStr=[[NSString alloc] initWithData:attachmentData encoding:0x80000632];
    }
   if (!aStr){
     //用GBK編碼不行,再用GB18030編碼
     aStr=[[NSString alloc] initWithData:attachmentData encoding:0x80000631];
    }
   加載完成之后,會顯示不全燎斩,可用textview進行排版虱歪,或者是通過html進行排版蜂绎,下面列舉html進行排版:
   NSString* responseStr = [NSString stringWithFormat:
   @""
    ""
    ""
    ""
    "%@"
    "/pre>"
   ""
   "",
   aStr];
   [attachmentWebView loadHTMLString:responseStr baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
   return;
  }
其他的處理亂碼就用utf8轉(zhuǎn)化就ok。
  
2笋鄙、取消長按webView上的鏈接彈出actionSheet的問題:
-(void)webViewDidFinishLoad:(UIWebView *)webView{
    [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout = 'none';"]师枣;
}

3、取消webView上的超級鏈接加載問題:
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
   if (navigationType==UIWebViewNavigationTypeLinkClicked) {
       return NO;
   }else {
      return YES;
   }
}

4萧落、刪除 webView的cookie的方法:
-(void)deleteCookieForDominPathStr:(NSString *)thePath
{
//刪除本地cookie践美,thePath為cookie路徑通過打印cookie可知道其路徑
   for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
   if([[cookie domain] isEqualToString:thePath]) {
     [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];}
   }
}

5、根據(jù)內(nèi)容獲取UIWebView的高度:
1.1  .使用sizeThatFits方法:
-(void)webViewDidFinishLoad:(UIWebView *)webView{
   CGRect frame = webView.frame;
   frame.size.height = 1;
   webView.frame = frame;
   CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
   frame.size = fittingSize;
   webView.frame = frame;
}
這個需要注意:使用 sizeThatFits前找岖,先將UIWebView的高度設(shè)為最小陨倡,即1,再次調(diào)用就會返回最合適的大小

1.2  使用JavaScript方法
-(void)webViewDidFinishLoad:(UIWebView *)webView{
    CGRect frame = webView.frame;
    NSString *fitHeight = [webview stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];
    frame.size.height = [fitHeight floatValue];
    webView.frame = frame;
}
3.iOS與js的交互問題
1许布、OC掉JS的方法:
第一步:需要添加系統(tǒng)庫 JavaScriptCore.framework兴革,引入頭文件#import <JavaScriptCore/JavaScriptCore.h>  
第二步:創(chuàng)建webview
第三步:創(chuàng)建 JSContext 橋梁
-(void)webViewDidFinishLoad:(UIWebView *)webView  {
    //創(chuàng)建JSContext 對象 
    JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
    NSString *alertJS=@"alert('我是拉拉吖')"; //準(zhǔn)備執(zhí)行的js代碼  
    [context evaluateScript:alertJS];//通過oc方法調(diào)用js的alert  
}

2、JS調(diào)用OC方法:
例如:我們的app最近開發(fā)的七夕開獎活動蜜唾,每次打開app杂曲,如果沒開獎,就會有百寶箱灵妨,提示打開百寶箱
第一步:需要添加系統(tǒng)庫 JavaScriptCore.framework解阅,引入頭文件#import <JavaScriptCore/JavaScriptCore.h>  
第二步:創(chuàng)建webview
第三步:創(chuàng)建 JSContext 橋梁
第四步:規(guī)定名稱:TestJSObject
第五步:規(guī)定方法帶參數(shù)的:-(void)TestOneParameter:(NSString *)message 
@property (nonatomic, strong) JSContext *jsContext; 
-(void)webViewDidFinishLoad:(UIWebView *)webView {
   //建立連接
   self.jsContext = (JSContext *)[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
   self.jsContext.exceptionHandler = ^(JSContext *con, JSValue *exception) {
        NSLog(@"%@", exception);
        con.exception = exception;
    };
    //創(chuàng)建對象,處理來自JS調(diào)用的類
    TestJSObject *textJS = [[TestJSObject alloc] init];
    self.jsContext[@"TestJSObject"]= textJS;

}
重寫TestJSObject類
#import <Foundation/Foundation.h>  
#import <JavaScriptCore/JavaScriptCore.h>  
  
//首先創(chuàng)建一個實現(xiàn)了JSExport協(xié)議的協(xié)議  
@protocol TestJSObjectProtocol <JSExport>  
//此處我們測試幾種參數(shù)的情況  
-(void)TestNOParameter;  
-(void)TestOneParameter:(NSString *)message;  
@end  
//讓我們創(chuàng)建的類實現(xiàn)上邊的協(xié)議  
@interface TestJSObject : NSObject<TestJSObjectProtocol>  
  
@end  

#import "TestJSObject.h"  
@implementation TestJSObject
-(void)TestOneParameter:(NSString *)message  
{  
    NSLog(@"this is ios TestOneParameter=%@",message);  
} 
@end

注意:如果js是多個參數(shù)的話  我們代理方法的所有變量前的名字連起來要和js的方法名字一樣
比如: js方法為  testobject.TestTowParameterSecondParameter('參數(shù)A','參數(shù)B')
他有兩個參數(shù) 那么我們的代理方法 就是把js的方法名 TestTowParameterSecondParameter 任意拆分成兩段作為代理方法名
-(void)TestTowParameter:(NSString *)message1 SecondParameter:(NSString *)message2;  

3泌霍、使用第三方的WebViewJavascriptBridge
  第一步:導(dǎo)入第三方WebViewJavascriptBridge
  第二步:引入頭文件:#import "WebViewJavascriptBridge.h"
  第三步:同js方規(guī)定方法:@"pushAppParam"
  @property (nonatomic,strong) WebViewJavascriptBridge *bridge;
  - (void)viewDidLoad{
       //調(diào)用方法
       [self addInitWebViewJavascriptBridge];
   }
實現(xiàn)方法
- (void) addInitWebViewJavascriptBridge{
     self.bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView];
    [self.bridge setWebViewDelegate:self];
    
    [self.bridge registerHandler:@"pushAppParam" handler:^(id data, WVJBResponseCallback responseCallback) {
        NSDictionary *dic = data;
       //實現(xiàn)需要的功能
        }
    ];
  }

以上資料特別感謝http://www.reibang.com/p/8f3c47c24e29

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末货抄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子朱转,更是在濱河造成了極大的恐慌蟹地,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藤为,死亡現(xiàn)場離奇詭異怪与,居然都是意外死亡,警方通過查閱死者的電腦和手機缅疟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門分别,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人存淫,你說我怎么就攤上這事耘斩。” “怎么了桅咆?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵括授,是天一觀的道長。 經(jīng)常有香客問我,道長荚虚,這世上最難降的妖魔是什么薛夜? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮版述,結(jié)果婚禮上梯澜,老公的妹妹穿的比我還像新娘。我一直安慰自己渴析,他們只是感情好腊徙,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著檬某,像睡著了一般。 火紅的嫁衣襯著肌膚如雪螟蝙。 梳的紋絲不亂的頭發(fā)上恢恼,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機與錄音胰默,去河邊找鬼场斑。 笑死,一個胖子當(dāng)著我的面吹牛牵署,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼惧磺,長吁一口氣:“原來是場噩夢啊……” “哼均抽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起取具,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤脖隶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后暇检,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體产阱,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年块仆,在試婚紗的時候發(fā)現(xiàn)自己被綠了构蹬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡悔据,死狀恐怖庄敛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜜暑,我是刑警寧澤铐姚,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響隐绵,放射性物質(zhì)發(fā)生泄漏之众。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一依许、第九天 我趴在偏房一處隱蔽的房頂上張望棺禾。 院中可真熱鬧,春花似錦峭跳、人聲如沸膘婶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悬襟。三九已至,卻和暖如春拯刁,著一層夾襖步出監(jiān)牢的瞬間脊岳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工垛玻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留割捅,地道東北人。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓帚桩,卻偏偏與公主長得像亿驾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子账嚎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容