gpt4 book ai didi

iOS : How to save selected row of tableview even I refresh tableview?

转载 作者:行者123 更新时间:2023-11-29 00:07:38 25 4
gpt4 key购买 nike

使用一些 API,我以表格 View 格式显示数据。

A) 当第一次调用 API 时,我们将获得 10 个用户详细信息,因此第一次我们可以在 tableview 中看到 10 行。当我们向下滚动(即 10 行后)时,一个新的 API 会调用 nextPageURL(即第 2 页),它包含获取 10 个用户详细信息。当您再次达到 20 行时,nextPageURL 即第 3 页 API 将调用,并且 10 条记录将再次以 JSON 形式获取,并再次显示在 TableView 中。 (工作正常。获取数据和在数据中显示时没有问题)这是我项目中表格 View 的工作流程。

B) 这里我使用 UILongPressGestureRecognizer 来选择表格 View 的行。使用 UILongPressGestureRecognizer 我可以选择多行。 (这也很好用)

C) 用于它的代码,选择和取消选择表格 View 行

@interface InboxViewController ()

{
NSMutableArray *selectedArray;
NSString *selectedIDs;
}

@property (strong,nonatomic) NSIndexPath *selectedPath;


- (void)viewDidLoad
{

selectedArray = [[NSMutableArray alloc] init];
self.tableView.allowsMultipleSelectionDuringEditing = true;
UILongPressGestureRecognizer *lpGesture = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(EditTableView:)];
[lpGesture setMinimumPressDuration:1];
[self.tableView addGestureRecognizer:lpGesture];

[self reload]; // for getting data
}

-(void)reload
{

// API sample
NSString * url= [NSString stringWithFormat:@"%@api/v2/get-userDetails?token=%@&api=%@&show=%@&departments=%@",[userDefaults objectForKey:@"baseURL"],[userDefaults objectForKey:@"token"],apiValue,showInbox,Alldeparatments];
NSLog(@"URL is : %@",url);


// here get JSON (First 10 user details data)

}

-(void)EditTableView:(UIGestureRecognizer*)gesture{
[self.tableView setEditing:YES animated:YES];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (self.currentPage == self.totalPages
|| self.totalTickets == _mutableArray.count) {
return _mutableArray.count;
}


return _mutableArray.count + 1;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

if (indexPath.row == [_mutableArray count] - 1 ) {
NSLog(@"nextURL111 %@",_nextPageUrl);

if (( ![_nextPageUrl isEqual:[NSNull null]] ) && ( [_nextPageUrl length] != 0 )) {



[self loadMore]; // this method is called for getting next data i.e getting next 10 user details


}
else{
NSLog (@"ALL Caught UP");
}

}

这是第一次 API 调用,在这里我将获得 10 个用户详细信息,并在表格 View 中显示。

为了获取下一个用户详细信息,调用以下方法

-(void)loadMore
{

// next page API called here
}

为了选择我正在使用的行,

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 3;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
return YES;
}

选择和取消选择行

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

self.selectedPath = indexPath;

if ([tableView isEditing]) {

// [selectedArray addObject:[_mutableArray objectAtIndex:indexPath.row]];

[selectedArray addObject:[[_mutableArray objectAtIndex:indexPath.row] valueForKey:@"id"]];

count1=(int)[selectedArray count];
NSLog(@"Selected count is :%i",count1);
NSLog(@"Slected Array Id : %@",selectedArray);

selectedIDs = [selectedArray componentsJoinedByString:@","];
NSLog(@"Slected Ticket Id are : %@",selectedIDs);




}else{

// goes to next detail view
}
}

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {

self.selectedPath = indexPath;


// [selectedArray removeObject:[_mutableArray objectAtIndex:indexPath.row]];
[selectedArray removeObject:[[_mutableArray objectAtIndex:indexPath.row] valueForKey:@"id"]];

count1=(int)[selectedArray count];
NSLog(@"Selected count is :%i",count1);
NSLog(@"Slected Id : %@",selectedArray);

selectedIDs = [selectedArray componentsJoinedByString:@","];
NSLog(@"Slected Ticket Id are : %@",selectedIDs);


if (!selectedArray.count) {
[self.tableView setEditing:NO animated:YES];
}

}

我的问题/问题 -

我正在使用 UILongPressGestureRecognizer 选择 tableview 行,最多 10 行(位于前端),并在后台存储其 id 的一个数组中。如果您选择某些行,其行 ID 将添加到 selectedArray 中;如果您取消选择行,它将从 selectedArray 中删除对象

现在假设我选择了 5 张票,并假设当我向下滚动(10 行后)时,将调用新的 API,并且将显示接下来的 10 个用户详细信息,但这次无论选定的行都消失了(选定的行显示为未选定),但仍处于状态后台存储了id。

我想要的是,当我选择某些行时,即使我向下滚动并转到任何页面,所选箭头也不会消失,并且所选行存储在 selectedArray 对象中

最佳答案

如果您使用多重选择,您可以将此方法添加到您的 ViewController 并在需要调用 [tableView reloadData] 以保留选择时调用它。

- (void)reloadTableView
{
NSArray *indexPaths = [self.tableView indexPathsForSelectedRows];
[self.tableView reloadData];
for (NSIndexPath *path in indexPaths) {
[self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}

引用自 save selected row in UITableView after reloadData

关于iOS : How to save selected row of tableview even I refresh tableview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47569050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com