更改不同iOS版本的UITableViewStyle

更改不同iOS版本的UITableViewStyle,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我必须为ios7/6进行tableview设计-在ios6中,我需要实现tableview分组样式,在ios7中,我需要一个普通样式。因此,在故事板中,我将样式更改为plain,在UITableViewController子类的viewdiload中,我有如下内容: if (!IS_OS_7_OR_LATER) { self = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped]; } 但它不起作用

我必须为
ios7/6
进行tableview设计-在
ios6
中,我需要实现tableview分组样式,在
ios7
中,我需要一个普通样式。因此,在故事板中,我将样式更改为plain,在
UITableViewController
子类的viewdiload中,我有如下内容:

if (!IS_OS_7_OR_LATER) {
    self = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
}

但它不起作用。我尝试使用
initWithCoder
方法,但没有得到好的结果。有任何帮助吗?

尝试子类化UITableView,并重写此方法:

-(id)initWithFrame:(CGRect)frame style:(UITableViewStyle)
{
    if (!IS_OS_7_OR_LATER) {
          [super initWithFrame:frame style:UITableViewStyleGrouped];
     } else
          [super initWithFrame:frame style:UITableViewStylePlain];
}

然后,在Interface Builder上,将tableView的类设置为刚创建的派生类。

如tableView类参考中所述,必须在初始化时设置style属性。在此之后无法更改。在代码中,您可以使用if语句检查ios版本并使用适当的样式初始化。使用故事板遵循以下链接—(id)initWithFrame:(CGRect)frame style:(UITableViewStyle) {
bool islowerequaltosix=(floor(NSFoundationVersionNumber)您不能在方法内部更改self,并期望它实际更改您的身份…您可以更改样式…但当您说self=…时,您只是在该点设置了一个局部变量
- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)
{
    bool isLowerOrEqualToSix = (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1);

    if (isLowerOrEqualToSix) { // iOS 6 or lower
        [super initWithFrame:frame style:UITableViewStyleGrouped];
    } else { // iOS 7 or higher
        [super initWithFrame:frame style:UITableViewStylePlain];
    }
}