如何将整个索引路径、上一个、上一个和当前选定的索引路径值存储到 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 : ( " length = 2, path = 1 - 1 " ) 它显示最后选择的 index_path 但我想要整个选择的 index_path ,我没有收到错误,它只显示最后选择的 index_path 值。 您愿意分享您的项目,以便我更好地了解问题所在吗? 好的,我试过你的项目。现在到底是什么问题? :) 在应用程序中有 3 个问题。我想结束结果查看一个选项是分析。如果你点击它显示有多少这样的问题。我希望集合视图单元格通过红色(错误)/绿色(正确)显示有多少问题可能是正确和错误的【参考方案2】:

创建一个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 - 需要当前选定内容部分的索引

如何以编程方式在RadioGroup上设置选定的索引?

在 PreparetoSegue 期间检索选定 UICollectionViewCell 的索引路径?

DataGridView 中当前选定行的索引

如何将 tableview 部分的选定索引添加到数组