为设置创建UITableView。

时间:2014-06-19 16:13:29

标签: ios uitableview architecture

当要编写一个表来呈现和组织应用程序设置区域时,我总觉得有点困惑"。我认为更好的方法是使用静态表,但我发现非常难以自定义它(特别是因为我无法自定义分组视图单元格)。

所以我经常会得到一个带有数据源的公共表。我的怀疑与应该直接提供选项信息的单元格有关。

让我们说我需要2种细胞。

  1. 显示开关的单元格

  2. 显示选项

  3. 的当前值的单元格

    enter image description here

    我的怀疑基本上是:

    1. 设置细胞的最佳方法是什么?我应该创建一个子类,只在cellForItemAtIndex进程中显示或隐藏标签或开关吗?

    2. 与细胞互动的最佳方式是什么?当用户更改交换机的值时...如何设置对该交换机的引用以及包含它的右侧单元格?

    3. 数据源怎么样?目前我实施了一个开关,并根据所需的索引设置了单元格

    4. 您能否分享有关如何实施设置的一些想法/代码示例?

2 个答案:

答案 0 :(得分:2)

这个答案是基于我在自己的应用程序中完成的事情。

  1. 我不会将UITableViewCell子类化,除非我想做某事"真的"定制。我会使用标准的UITableViewCell,创建UISwitch控件或标签,具体取决于您要显示的内容,并将其添加为单元的附件。例如:

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString * cellIdentifier = @"Cell";
        UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    
        if (!cell)
            cell = [[TSOptionCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    
        if (indexPath.row == 0) /* or whatever index you want to set the switch or label at */
        {
            UISwitch * switch = [[UISwitch alloc] initWithFrame:frame];
            [switch addTarget:self action:@selector(toggleSwitch:) forControlEvents:(UIControlEventValueChanged | UIControlEventTouchDragInside)];
            /* create your switch and add it's target and action (method that's called when it is toggled) */
            // Set the value of the switch 
            switch = [[NSUserDefaults standardUserDefaults] boolForKey:@"key"];
    
            [cell setAccessoryView:switch];
        }
    }
    
  2. 您添加为"操作"的方法当用户与交换机交互时,上面的交换机被调用。例如,在代码中的某个地方降低,你就有了这个:

    -(void)toggleSwitch:(id)sender
     {
         /* handle user interaction somehow */
     }
    
  3. 这是我目前在应用商店中对我的应用做的事情。我使用switch语句检查indexPath.row与我希望切换显示的位置的索引,所以我认为这是合适的。

答案 1 :(得分:2)

另一种方法是在故事板中创建两个具有不同标识符的原型单元格和in

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

你应该在你需要的索引处使用每个单元格。 关于cellForRowAtIndexPath中的第二个问题,您应该将开关的当前状态保存在NSMutableArray中。

为每个单元格和

设置标签
- (void)toggleSwitch:(id)sender {
    NSInteger currentIndex;
    currentIndex = [sender superview].tag;
  [yourMutableArray replaceObjectAtIndex:currentIndex withObject:![NSNumber numberWithBool:[yourMutableArray objectAtIndex:currentIndex]BoolValue];

}

当然,在您的cellForRow中,您可以设置数组的值,如:

[yourMutableArray insertObject:[NSNumber numberWithBool:[mySwitch isOn] atIndex:indexPath.row];

希望这就是你要搜索的内容