2016-02-18 47 views
1

我有一個自定義UIView,它在其drawRect方法中繪製了幾行。然後,我創建一個常規的UITableViewCell並將其添加到我的自定義UIView。我的自定義UIView中的圖形代碼僅在選擇表格視圖單元格時顯示。一旦它被取消,所有的行都消失了。UTableViewCell子視圖中的drawRect僅在選中單元格時起作用

我強制setNeedsDisplay在運行時被多次調用來測試。不幸的是,這沒有什麼區別。單元格未選中時,線條不顯示。

任何想法?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = createEmptyCell() 
     let selectionView = SelectionView(frame: cell.bounds) 
     childSelectionView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
     cell.addSubview(childSelectionView) 
     return cell 
} 

這裏是一個空類

override func drawRect(rect: CGRect) { 
    super.drawRect(rect) 
    let path = UIBezierPath() 
    path.moveToPoint(CGPoint(x: 20,y: 50)) 
    path.addLineToPoint(CGPoint(x: bounds.width/2 - 4, y: 50)) 
    path.addLineToPoint(CGPoint(x: bounds.width/2, y: 58)) 
    path.addLineToPoint(CGPoint(x: bounds.width/2 + 4, y: 50)) 
    path.addLineToPoint(CGPoint(x: bounds.width - 20,y: 50)) 
    path.lineWidth = 1 
    UIColor.blackColor().setStroke() 
    path.stroke() 
} 
+1

你可以把一些代碼... !!!! –

回答

0

drawRect方法必須有這個東西。我剛剛在iOS 9.2上用Xcode 7.2.1和Swift 2.2測試了它,它按預期工作(圖中的紅線)。

enter image description here

請記住,當它選擇視圖之間的差異,當它不是是,當它的選擇,表視圖將設置視圖的背景顏色來清除,這樣它會顯示backgroundView。然後,當單元格不再被選中時,視圖的顏色被恢復。它通過contentView的層次結構的所有視圖來執行此操作。我在故事板中將測試視圖的背景顏色設置爲透明的紅色來演示這一點。

+0

我已添加代碼... – Craigt

0

感謝您發佈一些代碼。

首先,您調用名爲createEmptyCell()的方法。這可能是錯誤的做法。您必須使用dequeueReusableCellWithIdentifier()才能獲得您的手機號碼。請直接從tableView(_:cellForRowAtIndexPath:)委託方法調用它。

其次,絕對不要將子視圖添加到tableView(_:cellForRowAtIndexPath:)的單元格中。一旦使用dequeueReusableCellWithIdentifier(),您將重複使用單元格,並且您將一遍又一遍地添加相同的視圖,從而導致視覺和性能問題。

你想繼承UITableViewCell,並添加子視圖中init(style:reuseIdentifier:)或者在你的故事板原型細胞或從廈門國際銀行文件laded。

我還沒有測試過您的drawRect()代碼,但它看起來應該可以正常工作。如果您想在GitHub上發佈示例項目,我很樂意幫助您進行調試。

相關問題