如何在IOS中从UITableView搜索多个NSArray

时间:2012-09-04 01:51:11

标签: ios uitableview nsarray uisearchbar

我想要的是能够搜索UITableView,并将其他数组缩小到单元格的textlabel数组的结果。这可能对任何人都没有意义。这是一个例子。

一个名为titleArray的数组,用于填充单元格的textLabel:

"Toyota Yaris"
"Ford Escape"
"Ford F-150"

另一个名为detailArray的数组,用于填充单元格中textLabel下面的详细文本标签:

"Car"
"SUV"
"Truck"

当我搜索“福特”时,我希望UITableView显示如下的单元格:

Cell 1: Ford Escape
        SUV

Cell 2: Ford F-150
        Truck

但它显示如下:

Cell 1: Ford Escape
        Car

Cell 2: Ford F-150
        SUV

基本上它缩小了titleArray但不缩小detailArray所以它是显示对象1& 2来自titleArray但是0&来自detailArray的1。如果这让您感到困惑,请提出任何问题!

2 个答案:

答案 0 :(得分:2)

为此,只有一个阵列会更好。有两种方法可以做到这一点:

1)为数组元素创建一个自定义类(派生自NSObject),可能名为Vehicle。您的车辆类将具有“名称”属性和“类型”属性。

NSMutableArray *vehicleArray = [[NSMutableArray alloc] init];

Vehicle *myVehicle = [[Vehicle alloc] init];
myVehicle.name = @"Ford Escape";
myVehicle.type = @"SUV";

[vehicleArray addObject:myVehicle];

2)让数组中的元素为NSDictionary类型。每个字典都有一个名称和类型的键值对。

NSMutableArray *vehicleArray = [[NSMutableArray alloc] init];

NSDictionary *myVehicle = [[NSDictionary alloc] initWithObjectsAndKeys:@"Ford Escape", @"name", @"SUV", @"type", nil];

[vehicleArray addObject:myVehicle];

答案 1 :(得分:1)

在您的代码中,您可能在名为tableView:cellForRowAtIndexPath:的消息中创建UITableViewCell对象。我会针对您的问题审核此代码。当您创建/检索UITableViewCell时,您将填写标题和详细信息(在调试器中检查)。我注意到您正在遵循的示例是创建一个减少的项目数组以响应您的搜索参数。看起来你很可能需要在削减标题数组的同时削减细节数组。您可能还需要搜索详细信息数组(具体取决于您希望应用程序如何运行)。这可能会使您的搜索逻辑变得复杂。

//Possible search logic
for (int iii = 0; iii < titleArray.count; iii++) {
    if (<titleArray matches search string>) {
        [titlesToDisplay addObject:[titleArray objectAtIndex:iii]];
        [detailsToDisplay addObject:[detailArray objectAtIndex:iii]];
        //Assuming that you have titles and details in corresponding slots.
    }
}

现在,当您为UITableViewCell设置标题和详细设置时,您应该计算titlesToDisplay中的条目,并从titlesToDisplay和detailsToDisplay中检索条目。