当要编写一个表来呈现和组织应用程序设置区域时,我总觉得有点困惑"。我认为更好的方法是使用静态表,但我发现非常难以自定义它(特别是因为我无法自定义分组视图单元格)。
所以我经常会得到一个带有数据源的公共表。我的怀疑与应该直接提供选项信息的单元格有关。
让我们说我需要2种细胞。
显示开关的单元格
显示选项
我的怀疑基本上是:
设置细胞的最佳方法是什么?我应该创建一个子类,只在cellForItemAtIndex
进程中显示或隐藏标签或开关吗?
与细胞互动的最佳方式是什么?当用户更改交换机的值时...如何设置对该交换机的引用以及包含它的右侧单元格?
数据源怎么样?目前我实施了一个开关,并根据所需的索引设置了单元格
您能否分享有关如何实施设置的一些想法/代码示例?
答案 0 :(得分:2)
这个答案是基于我在自己的应用程序中完成的事情。
我不会将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];
}
}
您添加为"操作"的方法当用户与交换机交互时,上面的交换机被调用。例如,在代码中的某个地方降低,你就有了这个:
-(void)toggleSwitch:(id)sender
{
/* handle user interaction somehow */
}
这是我目前在应用商店中对我的应用做的事情。我使用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];
希望这就是你要搜索的内容