日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

1-2基础控件

發(fā)布時(shí)間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1-2基础控件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是UIImageView
  UIKit框架提供了非常多的UI控件,但并不是每一個(gè)都很常用,有些控件可能1年內(nèi)都用不上,有些控件天天用,比如UIButton、UILabel、UIImageView、UITableView等等
  UIImageView極其常用,功能比較專一:顯示圖片


什么是UILabel
  UILabel極其常用,功能比較專一:顯示文字
  

?

什么是按鈕
  還有一個(gè)非常重要的UI控件---UIButton,俗稱“按鈕”,一般情況下,點(diǎn)擊某個(gè)控件后,會(huì)做出相應(yīng)反應(yīng)的都是按鈕
  按鈕的功能比較多,既能顯示文字,又能顯示圖片,還能隨時(shí)調(diào)整內(nèi)部圖片和文字的位置

  

?

UIButton的狀態(tài)

  normal(普通狀態(tài))
  默認(rèn)情況(Default)
  對(duì)應(yīng)的枚舉常量:UIControlStateNormal

  highlighted(高亮狀態(tài))
  按鈕被按下去的時(shí)候(手指還未松開)
  對(duì)應(yīng)的枚舉常量:UIControlStateHighlighted

  disabled(失效狀態(tài),不可用狀態(tài))
  如果enabled屬性為NO,就是處于disable狀態(tài),代表按鈕不可以被點(diǎn)擊
  對(duì)應(yīng)的枚舉常量:UIControlStateDisabled

設(shè)置按鈕的背景圖片
  設(shè)置按鈕在不同狀態(tài)下的背景圖片(為了保證高亮狀態(tài)下的圖片正常顯示,必須設(shè)置按鈕的typecustom
  

按鈕的樣式
  實(shí)際上,UIButton自帶了很多種不同的樣式
  
  在用代碼創(chuàng)建按鈕的同時(shí)指定按鈕樣式
  UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  UIButtonTypeCustom:無(wú)類型,按鈕的內(nèi)容需要自定義
  UIButtonTypeDetailDisclosure:
  UIButtonTypeInfoLight:
  UIButtonTypeInfoDark:
  UIButtonTypeContactAdd:

UIButton的常見設(shè)置
 

 - (void)setTitle:(NSString *)title forState:(UIControlState)state;設(shè)置按鈕的文字- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;設(shè)置按鈕的文字顏色- (void)setImage:(UIImage *)image forState:(UIControlState)state;設(shè)置按鈕內(nèi)部的小圖片- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state;//設(shè)置按鈕的背景圖片 btn.titleLabel.font = [UIFont systemFontOfSize:13];// 設(shè)置按鈕的文字字體(需要拿到按鈕內(nèi)部的label來(lái)設(shè)置)- (NSString *)titleForState:(UIControlState)state;//獲得按鈕的文字- (UIColor *)titleColorForState:(UIControlState)state;//獲得按鈕的文字顏色- (UIImage *)imageForState:(UIControlState)state;//獲得按鈕內(nèi)部的小圖片- (UIImage *)backgroundImageForState:(UIControlState)state;//獲得按鈕的背景圖片

?



Storyboard到代碼的轉(zhuǎn)換
  

 

 // 創(chuàng)建一個(gè)自定義的按鈕UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];// 默認(rèn)狀態(tài)的背景[btn setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal];// 默認(rèn)狀態(tài)的文字[btn setTitle:@"點(diǎn)我啊" forState:UIControlStateNormal];// 默認(rèn)狀態(tài)的文字顏色[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

?

九宮格計(jì)算思路


?

HUD/指示器/蒙版/遮蓋

//顯示HUDNSString *text = nil;if(self.removeBtn.enabled == NO){text = @"表示已經(jīng)刪光了";}elseif(self.addBtn.enabled == NO){text = @"表示已經(jīng)添加滿了";}// if(text == nil) return;if(text){self.hud.text = text;self.hud.alpha = 1;dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(1.5*NSEC_PER_SEC)),dispatch_get_main_queue(),^{self.hud.alpha = 0.0;});}

?

?

什么是Plist文件
  直接將數(shù)據(jù)直接寫在代碼里面,不是一種合理的做法。如果數(shù)據(jù)經(jīng)常改,就要經(jīng)常翻開對(duì)應(yīng)的代碼進(jìn)行修改,造成代碼擴(kuò)展性低
  因此,可以考慮將經(jīng)常變的數(shù)據(jù)放在文件中進(jìn)行存儲(chǔ),程序啟動(dòng)后從文件中讀取最新的數(shù)據(jù)。如果要變動(dòng)數(shù)據(jù),直接修改數(shù)據(jù)文件即可,不用修改代碼
  一般可以使用屬性列表文件存儲(chǔ)NSArray或者NSDictionary之類的數(shù)據(jù),這種“屬性列表文件”的擴(kuò)展名plist,因此也稱為“plist文件
創(chuàng)建Plist文件
  

?

解析Plist文件
  接下來(lái)通過(guò)代碼來(lái)解析Plist文件中的數(shù)據(jù)
  獲得Plist文件的全路徑
  NSBundle *bundle = [NSBundle mainBundle];
  NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];

  加載plist文件
  _shops = [NSArray arrayWithContentsOfFile:path];

Plist文件的解析過(guò)程
  

Plist的使用注意
  plist的文件名不能叫做“info”、“Info”之類的
  添加plist等文件資源的時(shí)候,一定要勾選下面的選項(xiàng)
  

用模型取代字典的好處
  使用字典的壞處:一般情況下,設(shè)置數(shù)據(jù)和取出數(shù)據(jù)都使用“字符串類型的key”,編寫這些key時(shí),編輯器沒(méi)有智能提示,需要手敲
  dict[@"name"] = @"Jack";
  NSString *name = dict[@"name"];
  手敲字符串key,key容易寫錯(cuò), Key如果寫錯(cuò)了,編譯器不會(huì)有任何警告和報(bào)錯(cuò),造成設(shè)錯(cuò)數(shù)據(jù)或者取錯(cuò)數(shù)據(jù) 

  使用模型的好處:所謂模型,其實(shí)就是數(shù)據(jù)模型,專門用來(lái)存放數(shù)據(jù)的對(duì)象,用它來(lái)表示數(shù)據(jù)會(huì)更加專業(yè)
  模型設(shè)置數(shù)據(jù)和取出數(shù)據(jù)都是通過(guò)它的屬性,屬性名如果寫錯(cuò)了,編譯器會(huì)馬上報(bào)錯(cuò),因此,保證了數(shù)據(jù)的正確性
  使用模型訪問(wèn)屬性時(shí),編譯器會(huì)提供一系列的提示,提高編碼效率
  app.name = @"Jack";
  NSString *name = app.name;

字典轉(zhuǎn)模型
  字典轉(zhuǎn)模型的過(guò)程最好封裝在模型內(nèi)部

  模型應(yīng)該提供一個(gè)可以傳入字典參數(shù)的構(gòu)造方法
  - (instancetype)initWithDict:(NSDictionary *)dict;
  + (instancetype)xxxWithDict:(NSDictionary *)dict;


instancetype
  instancetype在類型表示上,跟id一樣,可以表示任何對(duì)象類型
  instancetype只能用在返回值類型上,不能像id一樣用在參數(shù)類型上
  instancetype比id多一個(gè)好處:編譯器會(huì)檢測(cè)instancetype的真實(shí)類型

類前綴
  使用Objective-C開發(fā)iOS程序時(shí),最好在每個(gè)類名前面加一個(gè)前綴,用來(lái)標(biāo)識(shí)這個(gè)類的“老家”在哪

  目的是防止N個(gè)人開發(fā)了一樣的類,沖突了
  比如Jake Will、Kate Room在同一個(gè)項(xiàng)目中都各自開發(fā)了個(gè)Button類,這樣的程序是不能運(yùn)行起來(lái)的
  解決方案:Jake Will的類名叫做JWButton,Kate Room的類名叫做KRButton

字典轉(zhuǎn)模型的過(guò)程

?



view的封裝
  
  如果一個(gè)view內(nèi)部的子控件比較多,一般會(huì)考慮自定義一個(gè)view,把它內(nèi)部子控件的創(chuàng)建屏蔽起來(lái),不讓外界關(guān)心
  外界可以傳入對(duì)應(yīng)的模型數(shù)據(jù)給view,view拿到模型數(shù)據(jù)后給內(nèi)部的子控件設(shè)置對(duì)應(yīng)的數(shù)據(jù)

  封裝控件的基本步驟
    在initWithFrame:方法中添加子控件,提供便利構(gòu)造方法
    在layoutSubviews方法中設(shè)置子控件的frame(一定要調(diào)用superlayoutSubviews
    增加模型屬性,在模型屬性set方法中設(shè)置數(shù)據(jù)到子控件上

簡(jiǎn)單的MVC

?

Xib和storyboard對(duì)比

? 共同點(diǎn):
  都用來(lái)描述軟件界面
  都用Interface Builder工具來(lái)編輯
  本質(zhì)都是轉(zhuǎn)換成代碼去創(chuàng)建控件

? 不同點(diǎn)
  Xib是輕量級(jí)的,用來(lái)描述局部的UI界面
  Storyboard是重量級(jí)的,用來(lái)描述整個(gè)軟件的多個(gè)界面,并且能展示多個(gè)界面之間的跳轉(zhuǎn)關(guān)系

Xib的加載

//方法1 NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil options:nil]//方法2 UINib *nib = [UINib nibWithNibName:@"xib文件名" bundle:nil]; NSArray *views = [nib instantiateWithOwner:nil options:nil];

?

使用xib自定義view的步驟
  新建自定義控件類
  
  

  新建xib文件(文件名建議和view的類名一致)
  

?  

  修改xib中view的類名
  

  封裝xib的加載過(guò)程
  

  

  在類擴(kuò)展中增加子控件屬性,然后關(guān)聯(lián)子xib中子控件

    @interface XMGShopView()

      @property(weak,nonatomic)IBOutlet UIImageView *iconView;

      @property(weak,nonatomic)IBOutlet UIlabel *nameLabel;

    @end

  增加模型屬性,在模型屬性set方法中設(shè)置數(shù)據(jù)到子控件上
  

?

注意點(diǎn)
  一個(gè)控件有2種創(chuàng)建方式
  通過(guò)代碼創(chuàng)建,初始化時(shí)一定會(huì)調(diào)用initWithFrame:方法

  通過(guò)xib\storyboard創(chuàng)建
  初始化時(shí)不會(huì)調(diào)用initWithFrame:方法,只會(huì)調(diào)用initWithCoder:方法
  初始化完畢后會(huì)調(diào)用awakeFromNib方法

  有時(shí)候希望在控件初始化時(shí)做一些初始化操作,比如添加子控件、設(shè)置基本屬性
  這時(shí)需要根據(jù)控件的創(chuàng)建方式,來(lái)選擇在initWithFrame:、initWithCoder:、awakeFromNib的哪個(gè)方法中操作

UIImage

  一個(gè)UIImage對(duì)象代表一張圖片,一般通過(guò)imageNamed:方法就可以通過(guò)文件名加載項(xiàng)目中的圖片

  UIImage *image = [UIImage imageNamed:@"lufy"];

UILabel的基本設(shè)置
  要想讓UILabel自動(dòng)換行,設(shè)置Lines為0即可
  

  讓UILabel的文字居中顯示

  

@property(nonatomic,copy) NSString *text; //顯示的文字 @property(nonatomic,retain) UIFont *font; //字體 @property(nonatomic,retain) UIColor *textColor; //文字顏色 @property(nonatomic) NSTextAlignment textAlignment; //對(duì)齊模式(比如左對(duì)齊、居中對(duì)齊、右對(duì)齊)

?

UIFont
UIFont代表字體,常見創(chuàng)建方法有以下幾個(gè):

+ (UIFont *)systemFontOfSize:(CGFloat)fontSize; 系統(tǒng)默認(rèn)字體 + (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize; 粗體 + (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize; 斜體

?



UIButton、UIImageView、UILabel的選擇

特點(diǎn)
  UIButton
  既能顯示文字,又能顯示圖片(能顯示2張圖片,背景圖片、內(nèi)容圖片)
  長(zhǎng)按高亮的時(shí)候可以切換圖片\文字
  直接通過(guò)addTarget...方法監(jiān)聽點(diǎn)擊

  UIImageView
  能顯示圖片,不能直接通過(guò)addTarget...方法監(jiān)聽點(diǎn)擊

  UILabel
  能顯示文字,不能直接通過(guò)addTarget...方法監(jiān)聽點(diǎn)擊

選擇
  僅僅是顯示數(shù)據(jù),不需要點(diǎn)擊
  建議選擇UIImageView、UILabel

  不僅顯示數(shù)據(jù),還需要監(jiān)聽點(diǎn)擊
  建議選擇UIButton
  其實(shí)UIImageView、UILabel也可以通過(guò)手勢(shì)識(shí)別器來(lái)監(jiān)聽(后面課程會(huì)學(xué))

  長(zhǎng)按控件后,會(huì)改變顯示的內(nèi)容
  不用考慮了,選擇UIButton(因?yàn)閁IButton有highlighted這種狀態(tài))

  同時(shí)顯示2張圖片:背景圖片、內(nèi)容圖片
  不用考慮了,選擇UIButton



常用的Xcode插件
Xcode插件大全
  http://www.cocoachina.com/industry/20130918/7022.html

必備
  文檔注釋生成:https://github.com/onevcat/VVDocumenter-Xcode
  自動(dòng)檢索圖片名:https://github.com/ksuther/KSImageNamed-Xcode
  取色:https://github.com/omz/ColorSense-for-Xcode
  插件管理工具:https://github.com/mneorr/Alcatraz

???? 移除插件(可以使用上面提到的插件管理工具Alcatraz)
  到~/Library/Application Support/Developer/Shared/Xcode/Plug-ins文件夾中刪除

???? 插件失效修復(fù):http://joeshang.github.io/2015/04/10/fix-xcode-upgrade-plugin-invalid/




如何獲得APP內(nèi)部資源

  安裝一個(gè)iTools(百度一下就有)

  用USB連接設(shè)備,打開iTools

  

?

轉(zhuǎn)載于:https://www.cnblogs.com/laugh/p/6364607.html

總結(jié)

以上是生活随笔為你收集整理的1-2基础控件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。