2016-03-25 119 views
1
// Variable and ViewDidLoad 

var auxRow = 0 
var auxSection = 0 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

//數量的部分中,只有一個部分爲什麼numberOfRowsInSection僅針對一個部分被多次調用?

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     auxSection += 1 
     print("times section: ", auxSection) 
     return 1 
    } 

//行數

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    auxRow += 1 
    print("times row: ", auxRow) 
    return 2 
} 

// TableView中配置細胞

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let textCellIdentifier = "cellText" 
    let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) 
    let variable : String = indexPath.row.description 
    cell.textLabel?.text = variable 
    return cell 

} 

輸出:

times section: 1 
    times row: 1 
    times section: 2 
    times row: 2 
    times section: 3 
    times row: 3 
    times section: 4 
    times row: 4 

方法numberOfRowsInSection被調用4次。爲什麼會發生?

+0

我不明白爲什麼在方法numberOfRowsInSection中輸入4次。我只有一個部分 – PedroMeira

+1

@Lamar:OP詢問爲什麼numberOfRowsInSection方法執行4次,因爲他只有1個部分(不是4個部分,所以理論上它應該只執行一次) –

+0

numberOfRowsInSection方法執行4次,因爲?是什麼原因? – PedroMeira

回答

5

Apple不保證UIKit可能會多久調用一次您的委託方法。他們擁有這個框架。我們可以期望他們緩存該值,但沒有任何要求他們這樣做。

2

您可以在numberOfRowsInSection方法中設置斷點,以查看它在內部使用的內容。沒有理由不應該多次調用,因爲任何時候tableview內部都需要知道它有多少行。它被稱爲4次,因爲蘋果的tableview代碼需要在4個不同的時間知道你的一個部分有多少行。

+0

它被稱爲4倍numberOfRowsInSection和numberOfSectionsInTableView - > 倍部分:1 次行:1 倍部分:2 倍行:2 倍部分:3 次行:3 倍截面:4 倍行: 4 – PedroMeira

+1

@PedroMeira對不起,但我不明白這應該是什麼意思 –

+1

這兩種方法可以調用任意次數,這取決於tableview在內部如何使用它們。它不是100%綁定到您的tableview所具有的行數或節數。 –

相關問題