2013-06-20 27 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問題。 – 2013-06-20 09:13:03

+0

你想繼續打字,結果應該相應改變嗎? – amar

+0

是非常多 請問您能否給我更多指導? 喜歡編輯我的代碼,因爲我仍然不確定如何去實現這樣的。或者如果可能,至少應該更清楚一點 – user2443495

回答

0

不要這個

  • 存儲值從解析器獲取到一個數組。 responseArray
  • 使用另一個陣列來存儲值表 datasourceArray
  • 顯示後webvservice收到成功應答datasourceArray=responseArray然後重新用[tableView reloadData]
  • 表時開始搜索,從responseArray加載搜索結果爲DatasourceArray然後再次調用reloadData
0

可以使用的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 
} 

執行相應的代碼。

相關問題