Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 每次要对数据进行排序时,是否必须创建新的视图控制器?_Ios_Objective C_Uitableview_Sorting - Fatal编程技术网

Ios 每次要对数据进行排序时,是否必须创建新的视图控制器?

Ios 每次要对数据进行排序时,是否必须创建新的视图控制器?,ios,objective-c,uitableview,sorting,Ios,Objective C,Uitableview,Sorting,我不知道如何命名,甚至不知道如何开始查找。我需要你们这些好人的建议。我在网上做了一些研究,但我遇到的所有教程和建议都在viewDidLoad中进行排序 我有一个表视图,可以切换到另一个表视图。第一个tableview由硬编码数组填充,设置如下: 单元格0:按标题查看列表 单元格1:按作者查看列表 单元格2:按日期查看列表 在“切换”到第二个tableview之后,我可以使用viewDidLoad中的NSSortDescriptor按标题、作者或日期对结果进行排序。按照我目前的设置方式,每次我想按

我不知道如何命名,甚至不知道如何开始查找。我需要你们这些好人的建议。我在网上做了一些研究,但我遇到的所有教程和建议都在viewDidLoad中进行排序

我有一个表视图,可以切换到另一个表视图。第一个tableview由硬编码数组填充,设置如下:

单元格0:按标题查看列表
单元格1:按作者查看列表
单元格2:按日期查看列表

在“切换”到第二个tableview之后,我可以使用viewDidLoad中的NSSortDescriptor按标题、作者或日期对结果进行排序。按照我目前的设置方式,每次我想按某个参数(即标题、作者、日期)排序时,似乎都需要创建一个新的视图控制器。有没有其他方法可以做到这一点,这样我就可以重用第二个tableview,而不必为每种排序创建新的tableview?这里的参数不止我提到的三个。故事板很快就会变得杂乱无章

正在排序的信息来自一个自定义类,如果这有区别的话

任何帮助都将不胜感激,即使每次我想要排序时都必须创建新的视图控制器。我只是希望有其他选择

以下是viewDidLoad中的代码片段:

 NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
    self.dataSource = [[self.dataSource sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor, nil]] mutableCopy];
下面是来自didSelectRow

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NavigationController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"contentController"];

    if (indexPath.section == 0 && indexPath.row == 0)
    {
        ListTableViewController *listController = [self.storyboard instantiateViewControllerWithIdentifier:@"listController"];
        navigationController.viewControllers = @[listController];
    }

    self.frostedViewController.contentViewController = navigationController;
    [self.frostedViewController hideMenuViewController];
}

不需要单独的视图控制器。您需要将一些信息传递给第二个控制器,告诉它您要按什么排序。可能传递其中一个字符串,“title”、“author”或“date”。在第二个控制器中,根据传入的字符串在if-else子句中使用,以决定排序方式,进行排序,然后重新加载表。

尝试使用
-(void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
传递数据。谢谢您的回答。我试过这个,但还没有完全奏效。我一直在使用didSelectRowAtIndexPath移动到一个新的控制器。感谢您的回答并给我希望。我已经添加了我在viewdidload中使用的代码。我会在viewdidload中使用if-else吗?我尝试过类似的方法,但似乎调用的方法不正确,并且不断出现错误。@IWannaLearn,是的,viewDidLoad将是一个很好的方法。如果没有看到更多的代码,我无法进一步建议您。如何将信息传递给第二个控制器,以便它知道要执行哪种排序?数据的结构是什么(我假设数据源是一个数组)?我正在使用DidSelectRowatineXpath移动到下一个视图控制器。我在上面添加了代码。排序在第二个控制器的viewDidLoad中。您是对的,数据源是一个数组。@IWannaLearn,所以在不知道您的应用程序结构是什么的情况下,我不知道您在didSelectRow中做什么。你们有什么控制器?frostedViewController在结构中的位置,以及您是否也有某种菜单控制器?如何移动到第二个控制器(以及该控制器是哪个控制器)。此处的代码实际上不会移动到新控制器。磨砂视图控制器来自此处:。我相信视图控制器链接到导航控制器,而不是直接从菜单控制器。如果您查看一下,您将看到我的应用程序的基本设置,但我的应用程序将链接tableviewcontroller到tableviewcontroller,而不是从tableviewcontroller链接到uiviewcontroller(如本代码所示)。当我以前使用这个设置时,我在menuController中为每个单元格创建了一个新的视图控制器。我希望有一个更简单的方法。