IOS實例隨筆

工廠方法實例化

用於簡化對象的實例化

通常與類名相同。首字母小寫

工廠方法可以傳遞參數

+(id)類名;


彈出輸入:endEditing:YES


在類文件的.h文件中之所以對視圖是weak弱引用,是因爲在nib文件中(故事板和xib)是已經強引用了


可以用for in方法快速將視圖放入數組中

xxx isKindOfClass:[Xxx class]


出了loadView要連線

viewdidload千萬不要忘記執行父類的方法[super viewdidload]

純代碼開發中UITableViewController中,根視圖self.view就是self.tableView

loadview中self.view要寫成self.tableivew

在UITableViewController中要實例化視圖,可以先實例化tableView

sectionForSectionIndexTitle:索引數值的轉換 返回的是section的索引,等於-1不做跳轉

for (UIView* textField in self.view.subviews) {

        if ([textField isKindOfClass:[UITextField class]]) {

            [self.textFieldArray addObject:textField];

        }

    }


字符串 characterAtIndex:(NSUinteger);取出首字母

strong和weak,派生出來的用weak,對上級有依賴關係,有人管了用weak,沒人管用strong


UItableviewcell的方法在滾動的時候顯示都會運行的
所謂可重用標識符,是用來在緩衝池查找緩衝單元格使用的字符串
不僅cell有優化,header和footer都有優化,如果僅僅是字符串section則不需要
UITableViewHeaderFooterView 返回的是視圖UIView,可以優化。這裏麪包含了一個contentView和cell很像,自定義視圖內容部分的代碼,需要卸載header==nil分支語句中
if分支裏面寫的是增加控件的代碼,外面寫的是設置內容的代碼 
強轉:父類賦值給子類時要強轉,而且程序員必須確認父類就是子類。
ViewWithTag
[button allTargets] 所有的監聽事件
- (void)xxx:(id)sender forEvent:(UIEvent *)event
NSSet *set = [event allTouches];
UITouch *touch = [set anyObject];
CGPoint loaction = [touch locationInView:self.tableview];
NSindexPath *indexpath = [self.tableview indexPathForRowAtPoint:location];

IOS7以後      boundingRectWithSize:options:context:替代sizeWithFont:constrainedToSize:lineBreakMode:方法
如果使用故事板或者xib的方式創建cell,那麼initWithStyle的方法不會被調用,用awakeFromNib方法替代


取消tableview的分割線
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
不限制文本行數
setNumberOfLines:0
設置外間距
setContentEdgeInsets:UIEdgeInsetsMake(上右下左);
拉伸圖片
stretchableImageWithLeftCapWidth:TopCapHeight

UIBarbutton是以數組的形式放入ToolBar的

界面的內容是基於數據的,在做增刪改查的時候,先對數據處理,再做界面處理

大BUG,一旦刷新表格數據,表格中的標題行,會重新實例化,而不會從緩衝池中加載。解決方法,自己做一個緩衝池(比如字典),或者註冊利用緩衝池

按鈕裏的視圖一定要設置state
自定義按鈕裏面設置圖片等比例顯示:self.imageview setContentMode:UIViewContentModeScaleAspectFit;


關於商品列表的九宮格實例的一些總結:

行數 = (Allcount - 1)/percount + 1;

列數 = Allcount / percount;

先抽象出一個商品類,包含名字和圖片

在開發過程中發現,每行顯示動態的按鈕,並且按鈕和圖片不是以按鈕的已給出的格式的需求,這時就需要抽象出按鈕類,利用title和image的rect來定製按鈕

然後又發現,每個cell包含的按鈕個數不定,這時需要抽象出cell類,通過總個數和每行個數算出numberofrowsInSection,總行數

在cell的實例方法中,其實已經把每行的按鈕加了進來,不過只是透明的而已沒有填充數據,

然後在cell方法中按照indexpath的row(行數)和每行要顯示的個數獲取對應在維護數組中dateList截取子數組subarrayWithRange:  起點和長度,問題來了。通過行數*每行的個數是可能大於數據長度,此時要判斷獲得真正數據長度後再去填充數據內容,爲了給後面的緩衝池優化帶來的影響提供了條件 。問題來了!如果從緩衝池中取出的cell是滿按鈕的並且當前需要顯示的按鈕是不滿的話,那麼就會顯示多餘的按鈕,遺留的按鈕。此時可以通過之前的條件來隱藏多餘的按鈕。大於子數組長度的那些按鈕隱藏,然後通過協議代理方法傳給控制器完成操作


如果想取到路徑最後一部分的字符串,可以使用NSString的lastPathComponent來獲取

xib裏的Autoshrink的Minimum Font Size可以制定最小字的尺寸以儘量小的字體顯出全部內容,lines設置成0就不換行, 解決了省略號問題

在cell中通過選中和取消選中一起用,可以讓用戶感受到選中一行的效果,也就是動畫的效果

tableview繼承自scrollview,cell是在contentsize,cell的frame相對於contentsize

loadview是懶加載

IOS7中的狀態欄是由控制器來控制 狀態欄的方法prefersStatue....
樣式:
- (UIstatusBarStyle)preferredStatusBarStyle

self.propertyName 使用self. 是對屬性的訪問,會進行getter方法,懶加載。 使用_ 是對局部變量的訪問。內存管理問題
- (NSArray *)Data
{
   if(_Date == nil){
      獲取數據模型加入數組代碼
}
  return _Data;
}
button currentTitle
數組 makeObjectsPerformSelector:@selector
用戶交互userInteractionEnabled

scrollview哪個方向不能滾就contentsize的哪個方向設置成0

代理設計模式:
1.監聽的思想:讓一個對象A監聽另一個對象的狀態,誰想監聽誰做代理
2、通知的思想:一個對象B狀態發生了改變(做了某些事情),想通知另一個對象A

NStimer定時器
線程優先級,[[NSRunLoop currentRunLoop] addTimer: forMode:NSRunLoopCommonModes];

只要父控件的userInterfaceEnabled爲no,子空間也不可以交互

兩種提醒:AlertView和UIActionSheet
圓角label    label.layer.cornerRadius = CGFloat和label,layer,masksToBounds = YES或者label.clipsToBounds = YES

如果代理方法是optional,那麼代理可能沒有實現這個方法,所以需要先去判斷他是否實現了此方法在通知代理
if([self.delegate respondsToSelector:@selector(Xxx:)]) {。。。。。};

KVC字典轉模型屬性 [self setValuesForKeyWithDictionary:dict];
- initWithDict:(NSDictionary *)dict{
       if (self = [super init]){
           [self setValuesForKeysWithDictionary:dict];
       }
       return self;
}
+XxxWithDict:(NSDictionary *)dict{
       return [[self alloc] initWithDict:dict];
}
 
cell中最右邊加view,比如開關之類的,cell.accessoryView = [[UISwitch alloc]init];

【UIColor colorWithRed: green: blue:]傳遞的是比例 xx/255.0 【蘋果規定】
活用headView和footView

array valueForKeyPath:@"title",去數組當中把每一個元素的title屬性都拿出來返回成一個數組
valueForKey:@“title“ 只能取直接屬性,不能取間接屬性,沒有keypath的間接功能

替換項目舊資源的時候:1、卸載原程序。2、product要clear,清除緩存

footerView只需要設置高度
獲取nib裏的view用nib instantiateWithOwner:nil options:nil].lastObject之類的

dispatch_after可以用來延遲執行方法
協議命名 規範:空間類名+delegate
代理方法普遍都是optional
判斷是否有方法 if([self.delegate respondsToSelector:@selector(xxx:))]

IOS的分割線用height爲1的uiview來做

純代碼開發一般用init來做初始化
xib一般用awakefromnib來做
xib適用於控件個數固定的需求

自定義cell高度的時候,可以再抽取一個數據模型出來,包括了frame和之前的數據,並且避免了cell無數次計算frame的次數,通過新的數據模型一次性計算完畢
一定要活用懶加載,精華!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章