2017-01-16 45 views
0

我正在致力於UItableViewController,其中可以有五種類型的UITableViewCell。每種細胞的主要部分都很常見。我可以爲所有五個單元實現這些部分,但是我想創建一個可重用的視圖並在所有單元格內使用它。設計和實施此要求的最佳方式是什麼?iOS - 如何在不同的UITableViewCell中重用UIView

例如,在Facebook供稿中,可以有許多類型的帖子。但每篇文章底部的like/comment/share面板都是一樣的。我怎樣才能實現這些不同類型的單元格,將/ comments/share面板保存在Xcode的一個地方。

在此先感謝

+1

子類'UITableViewCell'? –

+0

你能在答案部分解釋一下嗎?謝謝@CodeDifferent –

+0

創建一個UIView(Xib或編程方式無論對你而言都很簡單)。我會建議創建一個函數,它返回每個單元格通用的UIView。 而當你調用「cellForRowAt」。將該UIview添加爲ContentView的子視圖。 –

回答

1

使用故事板

你可以做的是子類UIView將包含所有的共同特徵。

例如:

class ViewWithBorder : UIView{ 

    //any view that you apply this class on in storyboard will 
    //have the following properties assigned to it 
    override func awakeFromNib() { 

     super.awakeFromNib() 

     self.layer.borderColor = UIColor.blue.cgColor 

     self.layer.borderWidth = 1.0 

     //programmatically add buttons and whatever you desire to this view here 
    } 
} 

現在,在你的故事板,你已經創建了一個原型細胞,只需添加一個UIView在細胞內和它的類設置爲viewWithBorder。所有分配給它的屬性awakeFromNib將在運行時添加到該視圖中。

注:如果以編程方式,而不是用故事板創建視圖,你將不得不重寫initWithCoder

OR

創建廈門國際銀行UIView,這將是在所有常見的意見,只是將其添加到您的單元格,如果它的零在您的cellForRow

+0

我想創建故事板中的常見視圖,然後在常見視圖中添加/插入按鈕的操作/目標。有沒有可能沒有編程添加它們?還有如何/在哪裏與細胞的非相同部分合並? –

+1

我不認爲你可以直接在storyboard中做,但你可以看看創建和使用xibs,這裏有很多相同的問題。 Xibs基本上是您可以放入故事板的物品的單獨組件。我個人只是以編程方式添加它們。 使用我剛剛給出的示例或使用xib的方法添加到單元格的非相同部分? – Rikh

1

爲了重複使用電池,我建議建立一個小區,你會添加在細胞之間共同擁有的每個部分,然後該單元繼承您這樣的主單元的一部分

class MyCommonCell: UITableViewCell { 

//declare variables init views and other things your tableview cells will have in common 

override init() { //do your initialisation here 
    } 
} 


class MyCell: MyCommonCell { 
//add here the different items from the cell following the same architecture as above 
} 

編輯回答評論:我的問題是具體使用常見的複雜uiview,與按鈕,行動/目標等我怎麼能實現它?

爲了做到這一點,那麼你需要創建一個延長線插頭的UIView

class MyExampleClass: UIView {} 

,然後創建一個包含視圖的新的.xib文件中的類,這種觀點,那麼你可以鏈接到您的新MyExampleClass和增加網點它

+0

這將是您的案例的最佳做法 – John

1

比方說,你想實現一種細胞與左手側的彩色圓點:

首先,定義您的自定義單元格類:

import UIKit 

@IBDesignable class MyTableViewCell : UITableViewCell { 
    @IBInspectable var dotColor: UIColor = UIColor.gray 

    override func draw(_ rect: CGRect) { 
     super.draw(rect) 

     let radius = rect.height/8 
     let center = CGPoint(x: 20, y: rect.midY) 

     let context = UIGraphicsGetCurrentContext()! 
     context.addArc(center: center, radius: radius, startAngle: 0, endAngle: 2 * CGFloat.pi, clockwise: true) 
     context.setFillColor(dotColor.cgColor) 
     context.fillPath() 
    } 
} 

現在到界面生成器設計你的原型細胞通過改變其類MyTableViewCell

Interface Builder

+0

我的問題是具體使用常見的複雜uiview,與按鈕,行動/目標等我怎麼能實現它? –

+0

將這些按鈕添加到「MyTableViewCell」並像往常一樣連接操作/目標。你需要提供更多具體信息,以幫助你超越 –

0

我想響應你的問題應該取決於需求。

如果你想實現像FB

例如面板,在Facebook的飼料,可以有很多類型的職位。但每篇文章底部的like/comment/share面板都是一樣的。我怎樣才能實現這些不同類型的單元格,將/ comments/share面板保存在Xcode的一個地方。

在我看來,你應該使用面板創建小單元。不要創建「大單元」。單元應該儘可能小,重用將會比大單元更快。此外,它將是最簡單的,然後是「大單元」與子類。

所以,你將有水木清華這樣

VideoPost cell 
like/comment/share panel cell 
ImagePost cell 
like/comment/share panel cell 
AudioPost cell 
like/comment/share panel cell 
.... 

而且你可以很容易地重新使用它的未來。希望它可以幫助你。

+0

問題不在於小細胞和大細胞。它關於如何使用與單個xib相同的部分。 –

0

首先,創建一個空的xib並添加UIView組件。創建一個類(類型:UIView Let Suppose「CommonView」)使用xib添加該類並完成所需的連接,Outlet和Action。

Add 
var uiview:CommonView? 

GOTO : heightForRowAt{ 
Set height of cell based on needed calculation. 
return height 
} 
Then Goto 
cellForRowAt{ 
var cell: TableViewCell! = tableView.dequeueReusableCell............. 
// Code for your Xib 

self.uiview?.frame = CGRect(x: cell.dynamicLabel.frame.origin.x , y: cell.dynamicLabel.frame.origin.y + size + (self.uiview?.frame.size.height)! ,width: (self.uiview?.frame.width)!, height: (self.uiview?.frame.height)!) 


self.uiview?.uielementAddedToViewXib/////// 


cell.contentView.addSubview(self.uiview!) 


return cell 
} 

請檢查Code here 請讓我知道它的工作與否。

+0

我可以知道代碼有什麼問題嗎? –

+0

我不是downvoter。我會檢查代碼ñ讓你知道。 –

+0

好吧,其實我沒有代碼這個職位,有人沒有檢查downvoted。 沒問題,它是否適合你? –

相關問題