Я хотел бы добавить функцию поиска в TableView
в моем приложении. Я заполняю таблицу NSArray
, которая имеет x
количество Objects
, которые содержат 3 NSStrings
. Вот как я построить что NSArray
:Добавление searchBar в TableView
Сначала я создать класс Code.h
:
#import <Foundation/Foundation.h>
@interface Code : NSObject
@property (nonatomic, strong) NSString *codeName;
@property (nonatomic, strong) NSString *codeNumber;
@property (nonatomic, strong) NSString *codeDesc;
@end
Далее, я синтезировать эти NSStrings
в Code.m
.
Сейчас в моей SearchViewController.m
, Вот как я создаю мой набор данных:
NSMutableArray *codes;
codes = [[NSMutableArray alloc] init];
Code *c = [[Code alloc] init];
[c setCodeNumber:@"1"];
[c setCodeName:@"First Title Here"];
[c setCodeDesc:@"I might write a desc in here."];
[codes addObject:c];
c = [[Code alloc] init];
[c setCodeNumber:@"2"];
[c setCodeName:@"Second Title Here"];
[c setCodeDesc:@"2nd desc would be written here."];
[codes addObject:c];
и так далее ...
Вот как я его отображения: cellForRowAtIndexPath
:
Code *c = [codes objectAtIndex:indexPath.row];
NSString *fused = [NSString stringWithFormat:@"%@ - %@",[c codeNumber],[c codeName]];
cell.textLabel.text = fused;
return cell;
So теперь, когда вы знаете, как мои данные структурированы и отображаются, есть ли у вас идея поиска либо NSArray
, либо, возможно, (желательно) TableCells
, которые уже созданы?
Я прошел через несколько учебников по Adding a Search Bar to a TableView
, но все они написаны для использования настройки массивов с использованием простых arrayWithObjects
.
SIDETHOUGHT: Возможно ли построить из моей базы arrayWithObjects:@"aaa-1",@"bbb-2",@"ccc-3"...
? Если я смогу это сделать, я смогу использовать эти учебники для заполнения своих ячеек и поиска их!
UPDATE:
Ваш второй ответ делает много больше смысла для меня! Спасибо за это. Я считаю, я следил за вашу инструкцию, но я получаю «- [код поиск]: непризнанный селектор направлен например 0x6a2eb20`, когда эта линия ударила
- Я добавил
@property (nonatomic, strong) NSString *searchString;
кCode.h
и синтезировал его вCode.m
. - Я добавил
NSMutableSet *searchResults;
вSearchViewController.h
«s@interface
- Я добавил свои методы
performSearchWithString
иmatchFound
кSearchViewController.m
- Непосредственно под те, которые я добавил это позвонить
performSearchWithString
х
- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchString {
NSLog(@"%@",searchString); //Just making sure searchString is set
[self performSearchWithString:searchString];
[self.tableView reloadData];
}
Удары об ошибке при [codes makeObjectsPerformSelector:@selector(search:) withObject:self];
работает. Я запутался b/c, это звучит так, как Код не распознает searchString, но я знаю, что добавил его в Code.h.
UPDATE: Для того, чтобы хранить объекты в searchResults
, я должен был изменить searchResults
от NSMutableSet
к NSMutableArray
и изменить - (void)matchFound:(Code *) matchingCode {}
к этому:
-(void) matchFound:(Code *) matchingCode {
Code *match = [[Code alloc] init];
if (searchResults.count == 0) {
searchResults = [[NSMutableArray alloc] init];
[match setCodeName:[matchingCode codeName]];
[match setCodeNumber:[matchingCode codeNumber]];
[match setCodeDesc:[matchingCode codeDesc]];
[searchResults addObject:match];
}
else
{
match = [[Code alloc] init];
[match setCodeName:[matchingCode codeName]];
[match setCodeNumber:[matchingCode codeNumber]];
[match setCodeDesc:[matchingCode codeDesc]];
[searchResults addObject:match];
}
с несколькими другими tweeks, у меня есть рабочий стол поиска для моего стола. Спасибо Тиму Кемпу!
О, также нечувствительный к регистру поиск был тем, что я искал. NSRange rangeName = [codeName rangeOfString: searchString options:NSCaseInsensitiveSearch];
Надеюсь, что этот вопрос и ответ будут полезны для следующей цели обучения разработчиков с помощью этого вопроса!
Я обновил свой вопрос, чтобы показать, где я нахожусь со вторым ответом. Мне кажется, что код не распознает поиск: self как селектор с объектом –
Вы пишете 'search' как метод в' Code'? Вы также добавили его в интерфейс (например, 'code.h'?) –
Нет и нет, теперь я добавил' - (void) search; 'to' Code.h', но я не уверен, как напишите его как метод в 'Code.m' ...' - (void) search {} '? Я использовал этот код, но все равно получаю ту же ошибку. Я пишу это неправильно. –