Swift - UITableView 设置分隔符样式

Posted

技术标签:

【中文标题】Swift - UITableView 设置分隔符样式【英文标题】:Swift - UITableView set separator style 【发布时间】:2015-01-03 22:27:13 【问题描述】:

如何在 Swift 中设置 UITableView 的分隔符样式?我想摆脱分隔符,以便表格视图中的单元格之间没有灰线。任何建议将不胜感激。以下是我已经尝试过的。

我在 Objective-C 中找到了这个方法

[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]

我已尽力将其翻译成 swift

self.tableView.setSeparatorStyle = UITableViewCellSeparatorStyle.None

但这会出现错误

'(UITableView, numberOfRowsInSection: Int) -> Int' does not have a member named 'setSeparatorStyle'

在苹果文档中,它在 Objective-C 中给出了这些声明

typedef enum : NSInteger  


UITableViewCellSeparatorStyleNone ,
   UITableViewCellSeparatorStyleSingleLine ,
   UITableViewCellSeparatorStyleSingleLineEtched 
 UITableViewCellSeparatorStyle;

所以我再次尝试使用

将其翻译成 Swift
 override func tableView(tableView: UITableView, setSeparatorStyle style: NSInteger) -> NSInteger 
    return UITableViewCellSeparatorStyleNone

但这只会引发更多错误,“Use of unresolved identifier 'UITableViewCellSeparatorStyleNone”

【问题讨论】:

【参考方案1】:

为了解释为什么你不能在 Swift 中调用 setSeparatorStyle,我需要解释一下这个方法在 Objective-C 中的来源。如果您在标题 (UITableView.h) 中搜索它,您将找不到它。唯一声明的是:

@property (nonatomic) UITableViewCellSeparatorStyle separatorStyle;

setSeparatorStyle 是在 Objective-C 中为属性自动生成的设置器。假设您在 Objective-C 中声明了一个属性,如下所示:

@interface SomeClass: NSObject

@property (nonatomic) id someProperty;

@end

Objective-C 会自动为该属性生成 setter 和 getter 方法,getter 是属性的名称,setter 是带有 set 前缀的名称。

所以你可以这样调用getter:

[object someProperty]

您可以像这样设置属性: [object setSomeProperty:newValue]

现在,这一切都很好,但是调用 setter 和 getter 的方法更短,即 dot 语法,如下所示:

object.someProperty = newValue; // setter

还有吸气剂:

object.someProperty // getter

现在在 Swift 中,这种以setSomeProperty 方式生成的 setter 隐式 不再存在。这一直是 Objective-C 的一个怪癖,所以 Swift 引入了一种统一的方法来设置和获取属性。 在 Swift 中,只有一种设置和获取属性的方法,它使用点语法,这与 Objective-C 中的点语法相同。

所以要真正回答您的问题,您需要删除setSeparatorStyle 中的set 部分,这将是您的新代码:

self.tableview.separatorStyle = UITableViewCellSeparatorStyle.none

通常你不必写self,如果范围内只有一个名为tableView的变量,Swift足够聪明,可以意识到你想使用self.tableView,所以你可以写

tableview.separatorStyle = UITableViewCellSeparatorStyle.none

而且 Swift 甚至足够聪明地意识到在赋值运算符(等号,=)之后的可能是分隔符样式,所以你可以只写 .none

tableview.separatorStyle = .none

【讨论】:

好帖子!在 Swift4 中 .None 已重命名为 .none【参考方案2】:

对于那些正在寻找 Swift 2 和 3 表示法的人:

tableView.separatorStyle = UITableViewCellSeparatorStyle.None;

【讨论】:

【参考方案3】:

我用过:

tableview.separatorStyle = .None

【讨论】:

【参考方案4】:

在 Swift 5 中

tableview.separatorStyle = UITableViewCell.SeparatorStyle.none

【讨论】:

【参考方案5】:

看下面:

Attributes inspector > table view > separator 这应该可以帮助您更改分隔符样式或将其完全删除

【讨论】:

谢谢,这也是一个有效的解决方案

以上是关于Swift - UITableView 设置分隔符样式的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中向 UITableView 添加按日期分隔的部分

swift 在blog.chrishannah.me上发布“在UITableView上隐藏额外分隔符”的示例代码

如何删除 UITableView 中的单元格分隔符?

如何为 UITableView 设置分隔符样式 [重复]

如何在静态 UITableView 中仅删除一个部分的分隔符?

uitableview 单元格中有一个横向分隔符