【问题标题】:Swift - UITableView set separator styleSwift - UITableView 设置分隔符样式
【发布时间】: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”

【问题讨论】:

    标签: ios uitableview swift


    【解决方案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 这应该可以帮助您更改分隔符样式或将其完全删除

          【讨论】:

          • 谢谢,这也是一个有效的解决方案
          猜你喜欢
          • 2023-03-04
          • 1970-01-01
          • 1970-01-01
          • 2015-07-06
          • 1970-01-01
          • 2016-11-09
          • 2010-11-03
          • 2013-12-04
          • 1970-01-01
          相关资源
          最近更新 更多