IOS swift如何为Tableview创建自定义的第一个单元格

时间:2017-03-22 17:24:07

标签: swift uitableview swift3

我使用的是swift 3,我有一个自定义TableView

但是我试图让第一行与其他所有行完全不同。这就像Facebook应用程序,其中第一行有一个TextBox,表明“你在想什么?”,而tableView的其余部分是相同的。

我的自定义TableView如下所示:

enter image description here

我现在想在第一个TableView行上放置一个TextView,我该怎么做呢?

这是我的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let cell = tableView.dequeueReusableCell(withIdentifier: "HomePageTVC", for: indexPath) as! HomePageTVC


  cell.post.text = Posts[indexPath.row]
  cell.fullname.setTitle(FullName[indexPath.row],for: UIControlState.normal)
  cell.fullname.tag = indexPath.row
  cell.fullname.addTarget(self, action: #selector(HomePageC.Fullname_Click(sender:)), for: .touchUpInside)
  cell.comments.setTitle(Comments[indexPath.row],for: UIControlState.normal)
  cell.comments.tag = indexPath.row

  cell.votes.setTitle(Votes[indexPath.row],for: UIControlState.normal)      cell.votes.tag = indexPath.row
  cell.time.text = Times[indexPath.row]
  cell.shares.setTitle(Shares[indexPath.row],for: UIControlState.normal)
  cell.shares.tag = indexPath.row
  cell.location.text = Locations[indexPath.row]
  cell.vote_status.text = VoteStatus[indexPath.row]

  return cell
}

5 个答案:

答案 0 :(得分:1)

创建第二个单元格并将该单元格放回第一行,为第一行使用不同的标识符。

注意:还要返回其他回调(如高度),具体取决于indexPath.row == 0

答案 1 :(得分:1)

您可以创建一个表视图标题,该标题位于该部分的顶部,可以与您在cellForRowAtIndexPath中调用的自定义可重用单元格不同。

看看这个例子它应该让你入门。 https://www.hackingwithswift.com/example-code/uikit/how-to-add-a-section-header-to-a-table-view

答案 2 :(得分:1)

选项1:
使用两个部分,第1部分仅返回1个单元格

选项2:
创建自定义单元格,然后在tableview方法中,使用indexPath = 1之类的逻辑,然后使用cell as custom cell,否则使用cell as prototype cell

答案 3 :(得分:1)

创建2个单元格,然后在cellForRow函数中使用以下逻辑:

if indexPath.row == 0 {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MyCustomCell", for: indexPath) as! MyCustomCell
    //Do things
} else {
    let cell = tableView.dequeueReusableCell(withIdentifier: "HomePageTVC", for: indexPath) as! HomePageTVC
    //Do other things
}

答案 4 :(得分:0)

这是我如何做到的......

您需要使用自定义Model,Cell和XIB。

首先设置你的变量:

var results: [Results] = []

然后设置自定义模型:

struct Results {

var location: String

init(description: String, company_name: String, places: String){
    self.location = location
}

func toAnyObject() -> Any {
    print("return")
    return [
        "location": location,
    ]
}

然后附加到您的模型:

resultsReturn = Results(description: description!..... etc)

然后创建ResultsCell.swift文件并创建一个新函数:

func configureForResults(results: Results) {
print(results)
}

创建ResultsCell.swift时,请务必选中"创建XIB"然后在XIB中添加标签,图片和其他任何你想要的东西。

然后连接ResultsCell.swift文件中的标签和输出,然后连接configureForResults:

location.text = results.location

然后在你的cellForRowAt:

if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyCustomCell", for: indexPath) as! ResultsCell
let result = resultsReturn[indexPath.row];
cell.configureForResults(results: self.result)
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "HomePageTVC", for: indexPath) as! HomePageTVC
//Do other things
}

然后你需要创建AwakeFromNib函数,还有另外一件事你需要做的事情,我找不到它,因为我的笔记本电脑刚刚死了。一旦打开电源,我会更新这个答案。