如何将整个索引路径、上一个、上一个和当前选定的索引路径值存储到 didSelectRowAtIndexPath 中的 NSArray:方法
Posted
技术标签:
【中文标题】如何将整个索引路径、上一个、上一个和当前选定的索引路径值存储到 didSelectRowAtIndexPath 中的 NSArray:方法【英文标题】:How to store Whole index path, previous,before previous and current selected index path value to the NSArray within didSelectRowAtIndexPath: methods 【发布时间】:2015-05-06 12:36:46 【问题描述】:问题:
我开发测验应用程序。在应用程序中,一个表格视图中有 5 个问题。问题取自 plist 文件。每当我在表格视图中选择问题选项时,它都会显示当前选择的 index_path 值。
但我想要所有问题选择,例如从 1 到 5 选择数组中的 index_path。
我的代码:
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
// what is that code,....?
我想要:
NSLog(@"whole index_path : %@",array name);
输出:
整个 index_path : 0 1 0 2 1
【问题讨论】:
所有问题都在一个表格视图中?还是一个接一个地显示? 单表视图,但我自己使用 segue 方式,如果选择一个测验选项,它将从 plist 中获取问题,它将在同一个表视图中导航下一个问题。 【参考方案1】:好的。你必须做三件事:
转到您的故事板,并为从 resultsviewcontroller 到 analysisviewcontroller 的 segue 提供标识符“AnalysisScreen”
转到您的 resultsviewcontroller.m 并实现以下方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"AnalysisScreen"])
AnalysisViewController *analysisViewController = segue.destinationViewController;
analysisViewController.currentQuiz = self.currentQuiz;
-
转到您的 analysisviewcontroller.m 并在 cellForItemAtIndexPath 中替换该行
Quizcell.TotalQuestions.backgroundColor = [UIColor whiteColor];
以下几行:
Question *question = self.currentQuiz[indexPath.row];
Quizcell.TotalQuestions.backgroundColor = (question.selectedResponse == question.correctResponse) ? [UIColor greenColor] : [UIColor redColor];
希望我没听错! :)
【讨论】:
我试过了,但我得到了 2015-05-06 18:23:39.619IQ[38228:2439606] Total_Index : ( "创建一个NSMutableArray
并将index paths
添加为对象。每当您显示一个问题时,例如是否是第一个问题,从数组中访问其对象并查看选择了哪个索引路径并将该行设置为选中,对于其他问题也是如此。
但我建议您不要将索引路径保留在数组中,而是创建一个以 question id, selected answer id
作为成员的 NSObject
类,并且当您显示用户在访问 selected answer id
之前选择了某些内容的问题时显示为选中状态。
【讨论】:
你能在这个问题上发布任何例子吗? ,Ur rt 但我是 ios 的新手。所以只有我问了 @Tamil_Arya 我已经发布了另一个答案,您可以使用相同的方法来实现。 我试过了,但我得到了错误,只是因为你的方法对我来说很难。谢谢你。我会发布我的项目你能帮我吗? 非常感谢兄弟的回复。【参考方案3】:假设您有 5 个问题,每个问题最多可以有 5 个选项。
您有一个带有表格视图的屏幕,您一次在表格视图中显示 1 个带有选项(2 - 5 行)的问题,您可以选择让用户导航到下一个问题(在这种情况下,您用下一个问题重新加载表格)
这是你的设置。
现在,根据我的建议,创建一个 NSObject 类来保存每个问题的选定选项的信息。
@interface CustomObject : NSObject
NSInteger _questionId;
NSInteger _answerId;
@property (nonatomic,readwrite,assign) NSInteger questionId;
@property (nonatomic,readwrite,assign) NSInteger answerId;
@end
#import "CustomObject.h”
@implementation CustomObject
@synthesize questionId = _questionId, answerId = _answerId;
-(id) initWithQuestionId:(NSUInteger)qId answerId:(NSUInteger)aId
if( (self=[super init]) )
_questionId = qId;
_answerId = aId;
return self;
@end
现在假设对于 5 个问题,您将 id’s
设为 1, 2, 3, 4, 5
并且最初没有选择任何答案,因此将 selected answer id
的不适用 id 保留为 -1
。
在你的类中创建一个NSMutableArray
,将表格视图显示为
NSMutableArray *m_selectedAnsInfoList;
将上面的数组初始化一次
m_selectedAnsInfoList = [NSMuatbleArray alloc] init];
最初为每个问题创建 CustomObject 类的对象
(假设我们有5 question
所以questionCount = 5
)
for (int i=1; i <= questionCount : i++)// will iterate for 5 times
//create instance of CustomObject with current iteration count as question id and
// initially -1 for answer id, as for the first time no answer will be selected
CustomObject *obj = [[CustomObject alloc] initWithQuestionId:i answerId:-1];
// add object to the array
[m_selectedAnsInfoList addObject:obj];
[obj release];
您创建的表格视图将答案显示为问题的行,最初您会将所有行显示为未选中。
在didSelectRowAtIndexPath
内:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
// currentQuestionId keeps id of the table view showing current question
// using which access the questionInfoObject
obj = [m_selectedAnsInfoList objectAtIndex:currentQuestionId];
// set answer id in object
obj.answerId = indexPath.row; (from 0 to (number of answers - 1));
// replace old object with updated obj in array as
[m_selectedAnsInfoList replaceObject:obj atIndex:currentQuestionId];
通过这种方式,您可以存储为每个问题选择的答案的信息,并根据列表中相应对象中存储的信息显示它们选择的答案。
【讨论】:
以上是关于如何将整个索引路径、上一个、上一个和当前选定的索引路径值存储到 didSelectRowAtIndexPath 中的 NSArray:方法的主要内容,如果未能解决你的问题,请参考以下文章
jQuery Accordion - 需要当前选定内容部分的索引