当前位置: 首页 > 知识库问答 >
问题:

在swift中创建自定义表视图单元格

牟嘉
2023-03-14

我有一个带有几个IBOutlet的自定义单元格类。我已经将类添加到故事板。我已经连接了所有的出口。我的cellForRowAtIndexPath函数如下所示:

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as SwipeableCell

        cell.mainTextLabel.text = self.venueService.mainCategoriesArray()[indexPath.row]

        return cell
    }

这是我的自定义单元格类:

class SwipeableCell: UITableViewCell {
    @IBOutlet var option1: UIButton
    @IBOutlet var option2: UIButton
    @IBOutlet var topLayerView : UIView
    @IBOutlet var mainTextLabel : UILabel
    @IBOutlet var categoryIcon : UIImageView

    init(style: UITableViewCellStyle, reuseIdentifier: String!) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)


    }
}

当我运行应用程序时,我的所有手机都是空的。我已注销self.venueService。mainCategoriesArray(),它包含所有正确的字符串。我还尝试了将一个实际字符串与标签相等,这会产生相同的结果。

我错过了什么?感谢任何帮助。

共有3个答案

屠振濂
2023-03-14

我也有同样的问题。

一般来说,我做的和你一样。

class dynamicCell: UITableViewCell {

    @IBOutlet var testLabel : UILabel

    init(style: UITableViewCellStyle, reuseIdentifier: String) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }

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

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
}

在uitableviewcell方法中:

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    var cell :dynamicCell = tableView.dequeueReusableCellWithIdentifier("cell") as dynamicCell

    cell.testLabel.text = "so sad"

    println(cell.testLabel)

    return cell;
}

是的,表格视图什么也没有显示!但是你猜怎么着,它实际上显示了一些东西……因为我从println(cell.testLabel)得到的日志显示,所有的标签实际上都显示出来了。

但是!他们的框架很奇怪,有这样的东西:

帧 = (0 -21; 42 21);

所以它有一个(0,-21)as(x,y),这意味着标签只出现在单元格边界之外的某个地方。

所以我试着像这样手动添加调整帧:

cell . test label . frame = CGRectMake(10,10,42,21)

可悲的是,它不起作用。

-----------------10分钟后---------------更新

我成功了。因此,问题似乎来自大小类。

单击您的.故事板文件并转到文件检查器选项卡

取消选中大小等级复选框

最后,我的“如此悲伤”标签出来了!

衡丰茂
2023-03-14

这是谁的工作自定义单元。xib

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

    let identifier = "Custom"

    var cell: CustomCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomCel  

      if cell == nil {
            tableView.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: identifier)
           cell =tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomCell
        }return cell}
宗政金鹏
2023-03-14

使用Xcode 9(编辑也在11/12 Beta 2上测试)和Swift 4(编辑:也在5.2上测试)进行了测试

原始问题的提问者已经解决了他们的问题。我正在将此答案添加为一个迷你自包含的示例项目,供其他尝试执行相同操作的人使用。

完成的项目应如下所示:

它可以只是一个单一视图应用程序

将新的Swift文件添加到项目中。将其命名为MyCustomCell.swift。此类将保存添加到情节提要中的单元格中的视图的出口。

import UIKit
class MyCustomCell: UITableViewCell {
    @IBOutlet weak var myView: UIView!
    @IBOutlet weak var myCellLabel: UILabel!
}

我们稍后会连接这些网点。

打开ViewController.swift并确保您有以下内容:

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    // These strings will be the data for the table view cells
    let animals: [String] = ["Horse", "Cow", "Camel", "Sheep", "Goat"]
    
    // These are the colors of the square views in our table view cells.
    // In a real project you might use UIImages.
    let colors = [UIColor.blue, UIColor.yellow, UIColor.magenta, UIColor.red, UIColor.brown]
    
    // Don't forget to enter this in IB also
    let cellReuseIdentifier = "cell"
    
    @IBOutlet var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.delegate = self
        tableView.dataSource = self
    }
    
    // number of rows in table view
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.animals.count
    }
    
    // create a cell for each table view row
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell:MyCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! MyCustomCell
        
        cell.myView.backgroundColor = self.colors[indexPath.row]
        cell.myCellLabel.text = self.animals[indexPath.row]
        
        return cell
    }
    
    // method to run when table view cell is tapped
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("You tapped cell number \(indexPath.row).")
    }
}

将表格视图添加到视图控制器,并使用自动布局将其固定到视图控制器的四个侧面。然后将表格视图单元格拖到表格视图上。然后将视图和标签拖到原型单元格上。(您可能需要选择表格视图单元格,并在大小检查器中手动将行高设置为更高的位置,以便您有更多的工作空间。)使用自动布局来修复视图和标签在表格视图单元格的内容视图中的排列方式。例如,我将视图设为100x100。

自定义类名和标识符

选择表格视图单元格,并将自定义类设置为< code>MyCustomCell(我们添加的Swift文件中的类名)。还要将标识符设置为< code>cell(与我们在上面的代码中用于< code>cellReuseIdentifier的字符串相同。

连接插座

  • 控制从序列图像板中的表视图拖动到视图控制器代码中的 tableView 变量。
  • 对“原型”单元格中的“视图”和“标签”执行相同的操作,对我的自定义”类中的“视图”和“我的标签”变量执行相同的操作。

就是这样。您现在应该可以运行您的项目了。

  • 我在这里使用的彩色视图可以用任何东西代替。一个明显的例子是 UI 图像视图
  • 如果您只是想让 TableView 正常工作,请参阅此更基本的示例。
  • 如果需要具有可变单元格高度的表视图,请参阅此示例。
 类似资料:
  • 我试图创建一个位于两个单元格之间的UILabel,就像表格分隔符的显示方式一样。 Swift在UITableView的内置函数中允许这样做吗? 我该怎么做呢?

  • 我按照本教程创建了一个自定义。xib,我计划在表格视图的单元格中使用它: https://medium.com/@brianclouser/swift-3-creating-a-custom-view-from-a-xib-ecdfe5b3a960 以下是我创建的 .xib 类: 以前,我在情节提要中创建我的表视图单元格,但我已经意识到我想要一个更灵活的视图,以便我可以在应用的不同部分使用它,所以

  • 本文向大家介绍Android 创建自定义视图,包括了Android 创建自定义视图的使用技巧和注意事项,需要的朋友参考一下 示例 如果需要完全自定义的视图,则需要子类View(所有Android视图的超类),并提供自定义的sizing(onMeasure(...))和drawing(onDraw(...))方法: 创建您的自定义视图框架:每个自定义视图的基本相同。在这里,我们为自定义视图创建框架,

  • 英文原文:http://emberjs.com/guides/views/customizing-a-views-element 视图在页面上表现为一个单一的DOM元素。通过修改tagName属性,可以改变视图生成的元素的类型。 1 2 3 App.MyView = Ember.View.extend({ tagName: 'span' }); 另外,还可以通过设置一个字符串数组到clas

  • 问题内容: 我有一个带有几个IBOutlet的自定义单元类。我已经将课程添加到情节提要中。我已连接所有网点。我的cellForRowAtIndexPath函数看起来像这样: 这是我的自定义单元格类: 当我运行该应用程序时,我所有的单元格都为空。我已经注销,它包含所有正确的字符串。我也尝试过将等于标签的实际字符串放入,并产生相同的结果。 我想念什么?任何帮助表示赞赏。 问题答案: 感谢所有不同的建议

  • 晚上好, 我有以下设计: < li >红框:是表格行 < li>orane box:是一个集合视图 < li >蓝框:是一个采集单元 当集合视图为空时,我希望该行或集合视图自动调整为0。 目前我得到了这个: 所以当没有蓝色框时,我想让橙色框自动调整为高度= 0。 我知道我应该使用collectionView高度的约束,并在为空时设置为0。 但是我在表格单元格中有出口,在视图控制器中有集合委托。我不