最近在自定義tableviewCell的時候,遇到了一些問題,這裏簡單記錄一下。
Situations
首先我自定義TableviewCell, 在cell上設置了一些textfield, 然後在Controller中設置一個textfield實例變量來持有相對應的cell上的輸入框。然後,我想在viewWillAppear
中給對應的textfield設置placeholder,然後,我發現,並沒有什麼卵用!!!
然後我仔細查看了一下,發現:在viewWillAppear的時候,self.nameTextfield = nil
。說明此時:賦值操作還沒有執行,
然後我就查看了下Tableview代理的調用方法
2017-04-13 16:19:11.520 view will appear
2017-04-13 16:19:11.566 cell for row at index path
2017-04-13 16:19:11.578 cell for row at index path
2017-04-13 16:19:11.580 cell for row at index path
2017-04-13 16:19:11.583 cell for row at index path
2017-04-13 16:19:11.584 viewForHeaderInSection
這裏是tableview有四個cell,所以cellForRowAtIndex方法調用了4次
另外!
viewWillAppear方法是在cell初始化之前的,最後纔是tableviewHeader或者Footer初始化
然後,我以爲這是由於是自定義cell,所以調用順序受到了影響,然後我使用iOS系統的cell,發現:跟上邊自定義的調用順序是一樣的!
Solutions
這裏我說一下我自己的愚見:
1. 我們可以給Controller的textfield使用懶加載,然後不持有cell上輸入框對象,改爲 [cell addSubview: self.controllerTextfield];
這麼一來,也避免了在複用的時候cellTextfield上文字位置錯亂的問題。
2. 我們可以在viewDidAppear
方法中才去相對應的操作
2017-04-13 16:40:30.184 view will appear
2017-04-13 16:40:30.249 cell for row at index path
2017-04-13 16:40:30.266 cell for row at index path
2017-04-13 16:40:30.267 cell for row at index path
2017-04-13 16:40:30.268 cell for row at index path
2017-04-13 16:40:30.269 viewForHeaderInSection
2017-04-13 16:40:30.277 view did appear
由上面的順序可見,viewDiDAppear
調用的時候,cell已經初始化了,持有操作已經進行過了,那麼,我們也可以進行相對應的操作了
拋磚引玉,如果大家有別的想法,還請多多指教!