如何将UISwitch嵌入到静态UITableView中?

时间:2012-05-29 11:26:45

标签: ios uitableview uikit uiswitch

我看到了这个问题:

UISwitch in a UITableView cell

但它似乎正在处理一个动态页面。我真的只是想为我的应用程序和表格中的一些单元格(不是所有单元格)创建一个设置页面,需要在表格单元格上进行切换。我怎么能这样做?

4 个答案:

答案 0 :(得分:20)

以下是它在Interface Builder中的工作原理。不需要代码。

  • 将UISwitch拖到View Controller中。它需要在外面 主要观点。有点只是在那里和其他东西一起冷静。

  • 按住Ctrl键并单击应具有此开关的表格视图单元格 拖动到新的Switch。见1enter image description here

  • 将开关连接到表格视图单元的accessoryView插座。见2enter image description here

运行应用程序并观看交换机出现在表格中 - 完成!

注意:交换机奇怪地没有出现在“接口”构建器中。但是当你运行应用程序时它会出现

如果您还想将其连接到实例变量 - 例如,您可以稍后阅读其“on”属性 - 将其连接到插座,就像您将其他任何视图3,{{3 }}。

4 enter image description here

PS:请记住,UISwitch开/关状态位于“on”属性中,而不是“选中”。我只是添加这个,因为它有点令人困惑。

PPS:对于超大的像素,我很抱歉,我在视网膜屏幕上。

答案 1 :(得分:5)

只需将UISwitch拖到您已布置的单元格上即可。然后,您可以使用助手编辑器(非常棒)将其连接到父类。一个提示我会给你,如果你计划几个外观相似的单元格,在该部分创建第一个并恰好放置,那么你可以增加该部分的行数,IB将创建副本你现有的行。

答案 2 :(得分:2)

我为这个案例创建了一个函数,它的工作对我很有用..尝试一下,首先在单元格创建中,你可以检查要添加UISwitch的行,例如

 if(indexPath.row == 0)
      [self createOnOffView:cell withTitle:@"Somthing"  withTag:1001 defaultVal:YES];

功能是:

- (void) createOnOffView:(UITableViewCell*) cell withTitle:(NSString*) title withTag:(int)tag defaultVal:(BOOL) defaultVal
{
    CGRect rect;

    cell.textLabel.text = title;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    rect = cell.contentView.frame;

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        rect.origin.x = cell.frame.size.width - 20;
    else
        rect.origin.x = rect.size.width/2 +35;

    rect.origin.y = rect.size.height/2 - 15;    
    rect.size.width = 60;    

    UISwitch *switchView = [[UISwitch alloc] initWithFrame:rect];
    [cell.contentView addSubview:switchView];
    [switchView addTarget:self action:@selector(didChangeSwitch:) forControlEvents:UIControlEventValueChanged];

    switchView.tag = tag;

    [switchView setOn:defaultVal];

    [switchView release];
}

当值为switch时更改此方法将被触发..因此您可以根据标记知道哪个开关

- (void) didChangeSwitch:(UISwitch*)switchView
{
    if(switchView.tag == 1001)
    {
       //Do Somthing
    }

    if(switchView.tag == 1002)
    {
        //Do Somthing
    }    
}

希望这会有所帮助:)

答案 3 :(得分:0)

您执行此操作的方式与链接到的问题完全相同。没有“动态”表这样的东西。该表只显示您的模型。您的模型可能是动态的,但tableview不是。无论哪种方式,请按照该问题的答案进行操作,您将在tableview中进行切换。

相关问题