Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将UITableView设置为分组样式_Ios_Objective C_Uitableview_Cocoa Touch - Fatal编程技术网

Ios 如何将UITableView设置为分组样式

Ios 如何将UITableView设置为分组样式,ios,objective-c,uitableview,cocoa-touch,Ios,Objective C,Uitableview,Cocoa Touch,我有一个带有节的UITableViewController子类。剖面以默认样式显示(无圆角)。如何在代码中将TableView样式设置为“分组”?我没有为此使用Interface Builder,所以我需要 [self.tableView setGroupedStyle] 我搜索了堆栈溢出,但没有找到答案 self.tableView.style = UITableViewStyleGrouped 编辑: 假设这是一个读/写属性。在这种情况下,您可以在实例化控制器时遵循Dimitris的建议

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

[self.tableView setGroupedStyle]
我搜索了堆栈溢出,但没有找到答案

self.tableView.style = UITableViewStyleGrouped
编辑:


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

如果我理解您的意思,您必须使用该样式初始化控制器。比如:

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

您可以执行以下操作:

UITableView *myTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
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")
     }
 }
Swift 3:

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

您还可以尝试使分隔线颜色清晰,从而产生分组样式效果:

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

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

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

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

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

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

     if (self)
    {

     }
    return self;
}

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

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

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

现在在appdelegate.swift中,您可以调用:

let settingsController = SettingsViewController(style: .Grouped)

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

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

您也可以使用故事板/XIB来实现这一点

  • 转到情节提要->选择视图控制器->选择表格
  • 在interface builder中选择“样式”属性
  • 选择“分组”
  • 完成

  • 这并不像问题中提到的那么难。其实很简单。在故事板上试试这个


    如果您要继承UITableViewController,您可以再次初始化tableView

    目标C:

    self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
    
    斯威夫特:

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

    Swift 4

    let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped)
    
    使用普通的TableView

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

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

    swift 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
        }()
    

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

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

    UITableView *myTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
    
    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")
         }
     }
    

    谢谢你的回复。我没有使用XIB,我有一个带有子视图的选项卡控制器,它是我的自定义类。我不确定我可以把initWithStyle调用放在哪里,我没有做TableView init,它是由tab控制器完成的。在TableViewController中更改initWithStyle似乎不起作用。正如dimitris所说,如果您没有使用XIB,那么您必须在某处初始化UITableViewController。这就是您想要使用initWithStyle:call的地方。正如所述,它不是一个可以更改的属性。一个分组总是分组的。这不是一个正确的答案,它不能解决拥有UITableViewController子类的问题。如果继承UITableViewController,则必须重写构造函数,而不是创建另一个UITableView或UITableViewController。如问题中所述,如果它是子类控制器,您将如何执行此操作?这是真正的解决方案!谢谢被接受的答案是错误的,至少对于OS 3.0+来说,请注意,被接受的解决方案中有一个输入错误。我现在已经修好了。这两个答案对我都适用,但它们例示了不同的事情。这个答案是一个
    UITableView
    ,被接受的答案是一个
    UITableView控制器
    。实际上,被接受的答案是误导性的。请阅读OP所说的“我有一个UITableViewConotroller子类”。接受的答案只会给你一个简单的jane UITableViewController;如果不知道细节,就不可能解决用户关于子类的问题。这个答案和使用self.myTable可能会更好,IMHO。这也适用于iOS8上的约束(不知道iOS7)…只需使用
    CGRectZero
    框架和tableview样式进行初始化,然后添加约束,即可获得正确的样式和约束。此解决方案的注意事项-如果此解决方案位于NIB中的navigationController下,它将丢失该引用并使您感到困惑。对于使用UITableViewController子类的人来说,这是正确的解决方案。谢谢Swift版本:分区不会以这种方式折叠。如果您已经将tableView作为TableViewController的一部分,则最好以这种方式进行设置。其他答案更侧重于实例化新的tableView等。