iOS->UI中那些容易被人所忽略的小技巧總結分享(一)

前言 : 在開發(fā)中我們經(jīng)常會遇到一些小問題或者是發(fā)現(xiàn)一些小技巧,但我們往往都是覺得自己這次知道了就好了,并沒記錄起來,做了那么久開發(fā)難免會遺忘基礎,那么我就把一些常用的常遇到的小技巧總結起來

總結(篇章一)

  • 關于屬性與IB(Interface Builde簡稱IB,比如storyboard,xib)的連線,連線是可以一對多的,比如一個屬性連接著IB中的三個Button,或一個Button連接著代碼區(qū)的三個屬性(開發(fā)中較少用到,不建議)

  • 凡是繼承于UIControl類產(chǎn)生的對象都能連線進行事件交互,反之,則不能(注意是連線進行事件交互,比如Button有點擊事件,我點擊按鈕會調(diào)用與其連線的事件方法,而不是屬性與IB的連線,屬性與IB之間的拖線與是否繼承UIControl無關)

  • 在IB中右擊查看控件有沒有sent Events,有,一定能連線進行事件交互;沒有,則一定不能連線進行事件交互(注意是連線進行事件交互,比如Button有點擊事件,我點擊按鈕會調(diào)用與其連線的事件方法,而不是屬性與IB的連線,屬性與IB之間的拖線與是否繼承UIControl無關)

  • 在IB拖線中常用小技巧

調(diào)出關聯(lián)的兩個界面的快捷鍵 command+option+回車
回到一個界面:command+回車  
配合command+control+上或下 切換.h和.m文件
//使用示例: 
演練: 選中IB->command+option+回車->
(調(diào)出界面不準確,比如你要拖線到.m,它給你彈出.h)command+control+上或下->
回到一個界面:command+回車
  • 兩個經(jīng)典的錯誤: (有開發(fā)經(jīng)驗的人看錯誤一般先看reason:)
 1.錯誤1
  - 描述:
  reason: '[<ZHQViewController 0x7f9529d16850> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key testLabel.'
  - 原因: 在storyboard中的控件有多余的連線
  - 解決: 刪除多余的連線
 
 2. 錯誤2
  - 描述:
  reason: '-[ZHQViewController testClick]: unrecognized selector sent to instance 0x7fb9b8629060'
  - 原因: 在storyboard中的控件有多余的連線
  - 解決: 刪除多余的連線 或者 添加新的方法
  • 類擴展與分類,分類一般運用于給系統(tǒng)類分一個類以擴充方法,類擴展一般在自定義類的.m文件中使用,最大的區(qū)別是類擴展可以定義或生成成員變量,分類不行.它們用@property定義屬性都會生成get set方法,你重寫了哪個(比如get)方法系統(tǒng)就不會再幫你生成哪個(get)方法,但注意'分類'是不會生成成員變量的
  • 我們最常見的viewDidLoad,有些人搞了一兩年開發(fā)總是抱怨自己薪資低,然而他可能連這個都不懂
當控制器的view加載完畢的時候調(diào)用
(注意Did,是do的過去式 代表:做/干)在iOS中will表即將 did表已經(jīng)
(void)viewDidLoad {
        [super viewDidLoad];
        作用: 1. 初始化一些控件  2.初始化一些數(shù)據(jù)
        (有開發(fā)經(jīng)驗的人不會把全部代碼都寫這 應該抽調(diào)方法 比如:)
        [self setUpUI];
        [self setUpXXX];
}
//- (void)setUpUI(){代碼塊}
//- (void)setUpXXX(){代碼塊}
  • 對于Tag 近年被冠以1> 性能太差 2> 容易混亂 而被摒棄,特別是初學者,于是就覺得Tag毫無用處就不學了(雖然毫無技術含量),其實不然,在開發(fā)中有時候利用Tag幫我們綁定標識還是挺有用的,比如自定義TabBar上的按鈕,對按鈕綁定標識,進而提高開發(fā)效率

  • 關于對結構體成員賦值的詳解

//不能對 對象(redView)的 結構體屬性(frame)的 成員(origin.y) 進行直接賦值
self.redView.frame.origin.y -= 30; //是錯的
//只能對 對象(redView)的 結構體屬性(frame) 進行 整體賦值給臨時的結構體屬性
CGRect tempFrame = self.redView.frame;
//結構體是值進行傳遞,不是地址傳遞 臨時的結構體屬性賦'值'好
tempFrame.origin.y -= 30;
//將'值'傳回給源(self.redView.frame)
self.redView.frame = tempFrame;
  • 對bounds加寬高(實質上是修改了內(nèi)容層的尺寸),注意這時候bounds是中心點不變,向四周擴散的,如果減寬高,那自然是向四周縮減的了,這就不同于frame,而frame就沒什么特殊點,相信大家都知道就不多提了(對于frame和bounds內(nèi)部是比較復雜比較繞的,如果講的話可能需要一篇文章專題來講,如果你連內(nèi)容層都不懂的卻覺得自己懂了frame和bounds,那么你的理解一般都是投機取巧的或是錯誤的)
CGRect tempBounds = self.redView.bounds;
NSInteger offSet = 25; // 偏移量
// 改值
tempBounds.size.width += offSet;
tempBounds.size.height += offSet;
// 賦值
self.redView.bounds = tempBounds;//發(fā)現(xiàn)bounds是以中心點為原點
未完待續(xù)
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容