【问题标题】:Having Problems With UISearchBar in UITableViewControllerUITableViewController 中的 UISearchBar 出现问题
【发布时间】:2011-09-23 23:14:31
【问题描述】:

我正在尝试将 UISearchBar 添加到我的 UITableView。

这是他们用来搜索的方法:

- (void) searchTableView {

NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];

for (NSDictionary *dictionary in listOfItems)
{
NSArray *array = [dictionary objectForKey:@"Countries"];
[searchArray addObjectsFromArray:array];
}

for (NSString *sTemp in searchArray)
{
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

if (titleResultsRange.length > 0)
[copyListOfItems addObject:sTemp];
}

[searchArray release];
searchArray = nil;
}

但我没有字典,我只想在我的数组“exerciseArray”中搜索,它是这样初始化的:

NSString *path = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"plist"];
NSMutableArray *rootLevel = [[NSMutableArray alloc]initWithContentsOfFile:path];
self.exerciseArray = rootLevel;
[rootLevel release];

当我 NSLog 时,我得到:

exerciseArray: (
        {
        exerciseName = "Balance Board";
    },
        {
        exerciseName = "Barbell Seated Calf Raise";
    },
        {
        exerciseName = "Calf Press On The Leg Press Machine";
    },
        {
        exerciseName = "Calf Raises- With Bands";
    },

那么任何人都可以帮我修改搜索方法以适应我拥有的数组吗?里面好像有钥匙。

我试过了,但没用,在NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; 行崩溃了

出现错误*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance 0x2d6450

- (void) searchTableView {

    NSString *searchText = searchBar.text;
    NSLog(@"exerciseArray: %@", exerciseArray);
    for (NSString *sTemp in listOfItems)
    {
        if (sTemp) {
            NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

            if (titleResultsRange.length > 0)
                [copyListOfItems addObject:sTemp];
        }
    }
}

【问题讨论】:

  • NSDates 已经采用 UTC(又名“GMT”)。
  • 你能把你的UIViewController派生类的接口贴出来吗?
  • 请不要过度编辑您的问题,以免它们不再与原始内容相似。搜索引擎已经在此处获取了您的原始内容:google.no/… - 现在链接转到另一个问题。不要这样做。而是发布新问题!

标签: iphone objective-c uitableview uiviewcontroller uisearchbar


【解决方案1】:

我相信 NSPredicates 是在数组中搜索的好方法。你可以参考这个链接。Using NSPredicate to filter an NSArray based on NSDictionary keys

【讨论】:

    【解决方案2】:

    为了从表格视图中搜索,我已经尝试过了,我成功了希望它对你有帮助......

    -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
    {
        self.searching=NO;
        NSString *originalString;
        [self.filteredProductArray removeAllObjects];
        for (int i=0; i<self.exerciseArray.count; i++)
        {
            originalString=[[[self.exerciseArray objectAtIndex:i] objectForKey:@"exerciseName"] lowercaseString];
            if (!([originalString rangeOfString:[searchText lowercaseString]].location==NSNotFound))
            {
                [self.filteredProductArray addObject:[self.exerciseArray objectAtIndex:i]];
            }
        }
        if ([searchText isEqual:@""])
        {
            self.searching=NO;
        }
        [self.tableView reloadData];
    }
    

    【讨论】:

      【解决方案3】:

      看起来您有一个字典数组,每个字典中有一个键/值对(exerciseName)。所以对于你的数据集,它应该是这样的:

      for (NSDictionary *dictionary in exerciseArray)
      {
          NSArray *array = [dictionary objectForKey:@"exerciseName"];
          [searchArray addObjectsFromArray:array];
      }
      ...
      

      如果您发布与数组相关的 VC 代码以及您的 tableview 数据源方法,我可以修改它并向您展示您需要做什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多