2013-06-20 2 views
1

Я хочу добавить UISearchBar в следующий код ниже, который я использую в Xcode 4.6. Может кто-нибудь, пожалуйста, помогите мне?Как добавить UISearchBar к этому?

// 

#import "SocialMasterViewController.h" 

#import "SocialDetailViewController.h" 

@interface SocialMasterViewController() { 
    NSXMLParser *parser; 
    NSMutableArray *feeds; 
    NSMutableDictionary *item; 
    NSMutableString *title; 
    NSMutableString *link; 
    NSString *element; 
    NSArray *filteredStrings; 
} 
@end 

@implementation SocialMasterViewController 



-(void)gotosharing { 
    UIStoryboard *sharingStoryboard = [UIStoryboard storyboardWithName:@"Sharing" bundle:nil]; 
    UIViewController *initialSharingVC = [sharingStoryboard instantiateInitialViewController]; 
    initialSharingVC.modalTransitionStyle = UIModalTransitionStylePartialCurl; 
    [self presentViewController:initialSharingVC animated:YES completion:nil]; 
    } 


- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    feeds = [[NSMutableArray alloc] init]; 
    NSURL *url = [NSURL URLWithString:@"http://www.rssmix.com/u/3735817/rss.xml" 
      ]; 
    parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 
    [parser setDelegate:self]; 
    [parser setShouldResolveExternalEntities:NO]; 
    [parser parse]; 

    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; 
    [refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged]; 
    [self.tableView addSubview:refreshControl]; 

} 

- (void)refresh:(UIRefreshControl *)refreshControl { 
    [refreshControl endRefreshing]; 
} 


- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark - Table View 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return feeds.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 
    cell.textLabel.text = [[feeds objectAtIndex:indexPath.row] objectForKey: @"title"]; 
    return cell; 




} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 

    element = elementName; 

    if ([element isEqualToString:@"item"]) { 

     item = [[NSMutableDictionary alloc] init]; 
     title = [[NSMutableString alloc] init]; 
     link = [[NSMutableString alloc] init]; 

    } 

} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 

    if ([elementName isEqualToString:@"item"]) { 

     [item setObject:title forKey:@"title"]; 
     [item setObject:link forKey:@"link"]; 

     [feeds addObject:[item copy]]; 

    } 

} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

    if ([element isEqualToString:@"title"]) { 
     [title appendString:string]; 
    } else if ([element isEqualToString:@"link"]) { 
     [link appendString:string]; 
    } 

} 

- (void)parserDidEndDocument:(NSXMLParser *)parser { 

    [self.tableView reloadData]; 

} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([[segue identifier] isEqualToString:@"showDetail"]) { 

     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NSString *string = [feeds[indexPath.row] objectForKey: @"link"]; 
     [[segue destinationViewController] setUrl:string]; 

    } 
} 






- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [self filterURLsWithSearchBar:searchText]; 
    [self.tableView reloadData]; 
} 

- (void)filterURLsWithSearchBar:(NSString *)searchText 
{ 
    //[filteredStrings removeAllObjects]; 
    for (NSString *rssUrl in feeds) 
    { 
     NSComparisonResult result = [rssUrl compare:searchText 
              options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) 
               range:[rssUrl rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]]; 
     if (result == NSOrderedSame) { 
      [self->feeds addObject:filteredStrings]; 
     } 
    } 
} 

@end 

В принципе, я хочу, чтобы отфильтровать результаты, что приносимое NSXMLParser в поисковые термины, как они набираются в строку поиска.

Любая помощь очень ценится у вас, парни/девушки.

+0

Это не вопрос Xcode любым способом. –

+0

вы хотите продолжать печатать, и результат должен соответственно измениться? – amar

+0

да довольно не могли бы вы дать мне больше руководства, пожалуйста? как изменить мой код, так как я до сих пор не знаю, как это реализовать. Или, по крайней мере, что-то более ясно, если возможно – user2443495

ответ

0

ли получить этот

  • хранить значение от синтаксического анализатора в массив. responseArray
  • Используйте другой массив для хранения значения, чтобы показать в таблице datasourceArray
  • После webvservice Получать успешный ответ datasourceArray=responseArray затем загрузите таблицу с [tableView reloadData]
  • Когда начинается поиск, поиск с responseArray нагрузки результата в DatasourceArray затем вызвать reloadData снова
0

вы можете использовать textFeildDidBegunEditing метод делегата от uitextFeild

этот код поможет вам отфильтровать

NSMutableArray *array1=(NSMutableArray*)[txtEditFavoriteColor.text componentsSeparatedByString:@" "];//words from textFeild 

     for (NSString *str in array1) 
     { 
      NSString *tempStr = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
      if([tempStr length]) 
      { 
       [arryOfWordsToBeSearched addObject:tempStr]; 

      } 
     } 



     NSMutableArray *subpredicates = [NSMutableArray array]; 

     for(NSString *term in arryOfWordsToBeSearched) { 
      NSPredicate *p = [NSPredicate predicateWithFormat:@"name contains[cd] %@",term]; 
      [subpredicates addObject:p]; 
     } 

     NSPredicate *filter = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates]; 
//***************************************************************predicate made above****** 
     result = [[NSMutableArray alloc]initWithArray:[arryOfDummyData filteredArrayUsingPredicate: filter]];//search on data array using predicate 
0

Создать вид таблицы контроллера подкласса с nibfile. Добавьте панель поиска в nibfile в верхней части таблицы. Тогда контроллер представления результатов поиска будет добавлен автоматически. Большая часть поиска searchResultViewController как делегат, searchBar, searchDisplayDatasource и делегат автоматически устанавливаются. а также для делегата панели поиска задается как владелец файла.

Теперь реализовать представление таблицы соответствует этому протоколу. ,

Внесите следующий метод делегата.

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
// create the array of ur search result object 
} 

в настоящее время осуществляет tableViewDataSource и делегат чек, который таблица вызова метода следующим

if (tableView == self.searchDisplayController.searchResultsTableView) 
{ 
    // searchResultsTableView 
} 
else 
{ 
    // main table view 
} 

осуществлять соответствующий код.

Смежные вопросы