2

StackOverflow 上的全新海报。我已经在这里阅读和学习了一段时间,但我需要开始提出一些问题并进行互动,因此对于我的一些问题的任何帮助将不胜感激。

我基本上从 cellForRowAtIndexPath 中的 plist 在 tableView 中生成默认声音列表。这会为我生成一个说“x”声音的列表,其中一个声音在其单元格上放置了一个默认的复选标记附件。我有一个存储“活动”声音文件的索引值的 plist 文件,这就是我在生成的 tableView 中放置原始复选标记的方式。因此,在下面的代码中,如您所见,我为“活动”声音索引加载了 plist 的值,但是,当用户与我的 tableView 交互并选择新声音时,我需要放置默认复选标记从视图中删除。其他一切工作正常。我似乎无法破解这个简单的问题,我确定它是一个简单的语法问题,我只是不知道如何完成它。我确定解决方案是一两行代码,就在我的眼皮底下。提前感谢您的帮助。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSDictionary *dictionarySound = [NSDictionary dictionaryWithContentsOfFile:[self ActDataFilePath]];

NSNumber *defaultSoundIndex = [dictionarySound valueForKey:@"soundIndex"];

int theIntVal = [defaultSoundIndex integerValue]; 

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

//Everything below works just fine, checkmarks are removed and placed accordingly, sounds are played just fine.  I just need help above in removing the default checkmark

if(self.checkedPath)
{        
    UITableViewCell *uncheckCell = [tableView cellForRowAtIndexPath:self.checkedPath];

    uncheckCell.accessoryType = UITableViewCellAccessoryNone;
}


cell.accessoryType = UITableViewCellAccessoryCheckmark;

self.checkedPath = indexPath;

.......下面的其他代码在点击时播放我的声音并将新活动的声音名称和索引值存储在plist中。

4

3 回答 3

0

处理这个问题的常用方法是使用 didSelectRowAtIndexPath: 记录选择已更改的事实并告诉表视图重新加载数据,无论是全部还是仅针对受影响的单元格,然后在 cellAtRowForIndexPath: 中进行附件类型配置。

如果可以滚动表格,其他方法往往会失败。

于 2012-04-04T22:13:48.540 回答
0

试试下面的代码

cell.accessoryType = UITableViewCellAccessoryNone;
于 2012-04-05T04:39:36.717 回答
0

好的男孩和女孩,这是我自己问题的解决方案。

当基于我的 plist 文件构建表时,最初确定并放置在 cellForRowAtIndexPath 中的复选标记。这是我的 cellForRowAtIndexPath 的代码,它获取我的 plist 数据、构建我的表并使用复选标记设置默认选择。

NSDictionary *dicSound = [NSDictionary dictionaryWithContentsOfFile:[self ActDataFilePath]];

NSNumber *defaultSoundIndex = [dicSound valueForKey:@"soundIndex"];

//conversion of NSNumber to integer for comparison below to indexPath.row, both need to be int's
int theIntVal = [defaultSoundIndex integerValue];

static NSString *CheckMarkCellIdentifier = @"CheckMarkCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CheckMarkCellIdentifier];

cell.textLabel.text = [[MyArray objectAtIndex:indexPath.row] objectForKey:@"name"];

if(indexPath.row == theIntVal)
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;

}
else 
{
   cell.accessoryType = UITableViewCellAccessoryNone;

}

return cell;

当用户通过单击另一个单元格与 tableView 交互并且 didSelectRowAtIndexPath 启动时,这就是我放置新复选标记的方式以及我如何将旧单元格设置为没有辅助复选标记。

//This is a dictionary file that contains a number of values I need to grab
NSDictionary *dictionarySound = [NSDictionary dictionaryWithContentsOfFile:[self ActDataFilePath]];

NSNumber *defaultSoundIndex = [dictionarySound valueForKey:@"soundIndex"];

//conversion of NSNumber to integer for comparison below to indexPath.row, both need to be int's

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];               

if(self.checkedPath)
{        
    UITableViewCell *uncheckCell = [tableView cellForRowAtIndexPath:self.checkedPath];

    uncheckCell.accessoryType = UITableViewCellAccessoryNone;
}

cell.accessoryType = UITableViewCellAccessoryCheckmark;

self.checkedPath = indexPath;

//THE FIX
[tableView reloadData];

这里的关键是[tableView reloadData];行,因为它重新加载表并选中新选项并删除原始复选标记。显然,我正在重新加载数据,这意味着我在 plist 文件中内置了持久性。每次用户单击单元格时,我基本上都会更新本地字典的“soundIndex”值,然后将其写入持久 plist 文件。

希望这可以帮助其他遇到此问题的人。

于 2012-04-05T07:41:58.483 回答