【问题标题】:How can I set a UITableView to grouped style如何将 UITableView 设置为分组样式
【发布时间】:2010-11-03 15:33:09
【问题描述】:

我有一个带有部分的UITableViewController 子类。这些部分以默认样式(无圆角)显示。如何在代码中将 TableView 样式设置为分组?我没有为此使用 Interface Builder,所以我需要类似的东西

[self.tableView setGroupedStyle]

我在 Stack Overflow 上搜索过,但找不到答案。

【问题讨论】:

  • Swift 版本:Link

标签: ios objective-c uitableview cocoa-touch


【解决方案1】:
self.tableView.style = UITableViewStyleGrouped

编辑:

假设这是一个读/写属性。在这种情况下,您可以在实例化控制器时遵循 Dimitris 的建议并设置样式,或者(如果您使用的是 XIB),您可以通过 IB 进行设置。

【讨论】:

  • 感谢您的回复。我没有使用 XIB,我有一个带有子视图的选项卡控制器,这是我的自定义类。不知道我可以把 initWithStyle 调用放在哪里,我没有做 TableView 初始化,它是由选项卡控制器完成的。更改 TableViewController 中的 initWithStyle 似乎不起作用。
  • 正如 dimitris 所说,如果您不使用 XIB,则必须在 某处 初始化 UITableViewController。这就是您要使用 initWithStyle: 调用的地方。
【解决方案2】:

如果我明白你的意思,你必须用那种风格初始化你的控制器。比如:

myTVContoller = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];

【讨论】:

  • 如上所述,它不是可以更改的属性。一组总是一组。
  • 这不是一个正确的答案,它没有解决拥有 UITableViewController 子类的问题。如果继承 UITableViewController,则必须重写构造函数,而不是创建另一个 UITableView 或 UITableViewController。
  • 如问题中所述,如果它是子类控制器,您将如何执行此操作?
【解决方案3】:

您可以执行以下操作:

UITableView *myTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

斯威夫特 3:

let tableView = UITableView.init(frame: CGRect.zero, style: .grouped)

【讨论】:

  • 这是真正的解决方案!谢谢。接受的答案是错误的,至少对于 OS 3.0+
  • 请注意,接受的解决方案中有错字。我现在已经修好了。两个答案都对我有用,但它们实例化了不同的东西。这个答案是UITableView,接受的答案是UITableViewController
  • 实际上,接受的答案具有误导性。请阅读 OP 所说的“我有一个 UITableViewConotroller 子类”。接受的答案只给你一个简单的简 UITableViewController;如果不知道细节,就不可能解决用户关于子类的问题。恕我直言,这个答案和使用 self.myTable 可能会更好。
  • 这也适用于iOS8上的约束(不了解iOS7)......只需使用CGRectZero的框架以及您的tableview样式进行初始化,然后添加您的约束,您就得到了正确的样式以及您的约束。
【解决方案4】:

你也可以尝试让分隔线颜色清晰,这样可以产生分组样式效果:

[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];

【讨论】:

  • 部分不会以这种方式折叠。
【解决方案5】:

我给你我的解决方案,我在“XIB 模式”下工作,这里是 UITableViewController 的子类的代码:

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    return self;
}

【讨论】:

  • 注意此解决方案 - 如果它位于 NIB 中的 navigationController 下,它将失去该引用并使您非常困惑。
【解决方案6】:

你可以使用:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}

【讨论】:

    【解决方案7】:

    下面的代码为我工作,我也在使用 UITableview 类

    - (id)initWithStyle:(UITableViewStyle)style
    {
         self = [super initWithStyle:UITableViewStyleGrouped];
    
         if (self)
        {
    
         }
        return self;
    }
    

    【讨论】:

    • 对于使用 UITableViewController 子类的人来说,这是正确的解决方案。谢谢!
    【解决方案8】:

    在 ui 本身中设置分组样式:-选择 TableView 然后将“样式”(在属性检查器中)从普通更改为分组。

    【讨论】:

      【解决方案9】:

      Swift 4+:

      let myTableViewController = UITableViewController(style: .grouped)
      

      【讨论】:

        【解决方案10】:

        如果您想在已经在单独的 swift 文件中创建的子类上使用它,您也可以这样做(可能不是 100% 正确但有效)

        override init(style: UITableViewStyle) {
            super.init(style: style)
            UITableViewStyle.Grouped
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        

        现在你可以在 appdelegate.swift 中调用:

        let settingsController = SettingsViewController(style: .Grouped)
        

        【讨论】:

          【解决方案11】:

          如果您有一个 TableView 用于多个表,并且其中一个表是分组的,而另一个是普通的,那么您可以使用 UITableViewDelegate 中的函数模拟普通样式:

          override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {   
              return CGFloat.min
          }
          

          【讨论】:

            【解决方案12】:

            您也可以使用 storyboard/XIB 来做到这一点

            1. 转到情节提要 -> 选择您的 viewController -> 选择您的表格
            2. 在界面生成器中选择“样式”属性
            3. 选择“分组”
            4. 完成

            【讨论】:

              【解决方案13】:

              设置并不像问题中提到的那么难。其实很简单。在情节提要上试试这个。

              【讨论】:

              • 如果您已经有一个 tableView 作为 TableViewController 的一部分,那么这样设置是最好的。其他答案更侧重于实例化新的 tableView 等。
              【解决方案14】:

              如果你继承了 UITableViewController,你可以再次初始化 tableView。

              目标 C:

              self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
              

              斯威夫特:

              self.tableView = UITableView(frame: CGRect.zero, style: .grouped)
              

              【讨论】:

                【解决方案15】:

                斯威夫特 4

                使用普通的 TableView

                let tableView = TableView(frame: .zero, style: .grouped)
                

                使用 TPKeyboardAvoidingTableView

                let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped)
                

                【讨论】:

                  【解决方案16】:

                  斯威夫特 4

                  如果您不想使用故事板,这可能会有所帮助。

                  您可以在闭包中添加表格视图并设置属性:

                  lazy var tableView: UITableView = {
                          let tableView = UITableView(frame: .zero, style: .grouped)
                  
                          tableView.backgroundColor = UIColor(named: Palette.secondaryLight.rawValue)
                          tableView.rowHeight = 68
                          tableView.separatorStyle = .none
                          tableView.translatesAutoresizingMaskIntoConstraints = false
                          return tableView
                      }()
                  

                  然后添加子视图并设置约束。

                  【讨论】:

                    【解决方案17】:

                    如果您在代码中创建 UITableView,您可以执行以下操作:

                    class SettingsVC: UITableViewController {
                    
                        init() {
                            if #available(iOS 13.0, *) {
                                super.init(style: .insetGrouped)
                            } else {
                                super.init(nibName: nil, bundle: nil)
                            }
                         }
                        
                         @available(*, unavailable)
                         required init?(coder aDecoder: NSCoder) {
                             fatalError("init(coder:) has not been implemented")
                         }
                     }
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-04-23
                      • 2012-01-26
                      • 2023-03-04
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-02-02
                      相关资源
                      最近更新 更多