iOS UI基礎03,iosui03

來源:互聯網
上載者:User

iOS UI基礎03,iosui03

  • plist檔案
    • root: 代表著儲存的是什麼類型的資料
       如果root是array, 那麼將來從檔案中讀取進來的就是數組 plist中的每一個item就代表著數組中的一個元素 item對應的類型, 就代表數組中每一個元素的類型
    • 自訂的plist檔案的名稱不能包含info這個單詞,因為系統配置是info.plist
    • 擷取plist檔案路徑
      • NSString *path = [[NSBundle mainBundle] pathForResource:@"shops.plist" ofType:nil];
  • 字典轉模型

    • 原因:

      • 在開發中一般不會直接從字典中擷取資料

        • 1.字典的key是一個字串, 寫錯不會報錯
        • 2.英語不好, 單詞記不住
        • 3.由於key是一個字串, 所以在編碼的時候沒有提示
      • 為瞭解決這個問題, 我們可以使用對象來儲存資料,對象的作用就是用於儲存資料, 那麼我稱這個對象為模型

      • 規律: 在開發中但凡看到字典, 一般情況下都會建立一個與之對應的模型來儲存字典中的資料
      • 字典數組中還有字典數組 不能使用kvc進行字典轉換模型
      • 一般步驟:
        • 1.擷取plist檔案的絕對路徑
        • 2.根據路徑載入plist檔案
        • 3.將數組中所有的字典轉換為模型
  • 自訂VIEW

    • 自訂View的步驟:
      • 1.重寫初始化方法 (在裡面進行一次性的初始化) xib :awakeFromNib 純程式碼:initWithFrame
      • 2.重寫layoutSubviews, 在裡面布局子控制項
      • 3.接收外界傳入的資料, 重寫set方法
    • 注意:
      • 如果自訂一個View, 不建議在init方法中設定子控制項的位置 因為如果子控制項的位置需要根據父控制項的frame來計算, 在init方法中拿不到父控制項的frame
    • 注意:
      • 一般情況下自訂一個控制項會重寫控制項的initWithFrame方法, 因為使用者可能通過init方法建立也可能通過initWithFrame方法建立, 為了保證無論使用者通過哪一個方法建立都能添加子控制項, 所以重寫initWithFrame,init方法內部會調用initWithFrame
    • 注意:
      • 如果在類方法中建立對象, 建議使用self, 不要使用類名 如果直接使用類名,在有子類的時候由於父類已經寫死了,所以就不能通過該方法建立子類對象
    • layoutSubviews
      • 專門用於布局子控制項的位置
      • 重寫layoutSubviews方法, 一定要調用[super layoutSubviews]方法 如果不調用, 會出現一些奇葩的錯誤
    • 重寫模型set
      • 設定子控制項的資料
  • 使用week儲存控制項的原因:

    • 只要將一個對象添加到父控制項中, 那麼父控制項中的subViews數組就會強引用這這個控制項
  • xib
    • Xib和Storyboard一樣都是用來描述介面的
    • Xib是Storyboard的前身
    • Xib是用於描述一個簡單的介面或者一個局部的介面
    • Storyboard是用於描述整體
    • 拿到Xib方法
    • NibName: 需要載入的xib名稱 bundle: 從哪個包中尋找
    • - 1.UINib *nib = [UINib nibWithNibName:@"ShopView" bundle:[NSBundle mainBundle]];- 建立xib中描述的所有介面    NSArray *res = [nib instantiateWithOwner:nil options:nil];    [self.shopsView addSubview:res.firstObject];  2.NSArray *res = [[NSBundle mainBundle] loadNibNamed:@"ShopView" owner:nil options:nil];    [self.shopsView addSubview:res.firstObject];
    • xib載入原理:
      • 1.根據custom class建立對象 JXShopView *shopView = [JXShopView alloc] init];
      • 2.根據xib中的設定, 設定控制項的相關屬性 shopView.backgroundColor = [UIColor redColor]; shopView.frame = CGR ectMake(0, 0, 70, 100);
      • 3.建立所有子控制項, 並且設定子控制項的屬性
      • UIImageView iv = [[UIImageView alloc] init];
      • iv.frame = CGRectMake(0, 0, 70, 70);
      • UILabel label = [[UILabel alloc] init];
      • label.frame = CGRectMake(0, 70, 70, 30);
      • 4.檢查子控制項是否有連線, 如果有就進行關聯 self.iconView = iv; self.nameLabel = label;
      • 5.將所有子控制項添加到父控制項中 [shopView addSubview:iv]; [shopView addSubview:label];
    • 注意:
      • 如果是通過xib或者Storyboard建立一個控制項, 不會調用initWithFrame方法
      • 如果是通過xib或者Storyboard建立一個控制項,在"建立時"會調用initWithCoder方法,調用該方法時, 控制項不一定被建立好
      • 如果是通過xib或者Storyboard建立一個控制項,在"建立後"會調用awakeFromNib,調用該方法時, 證明控制項已經建立好了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.