iOS - 如何向此阵列添加搜索栏功能?

时间:2013-06-01 15:42:47

标签: ios cocoa-touch

有人可以告诉我如何将搜索功能添加到一个数组中,该数组包含我在以下代码中使用Xcode 4.6.2中的xml解析器收集的rss新闻链接的标题吗?所有我基本上想要的是能够在模拟器或应用程序中转到我的viewcontroller中的搜索栏,并能够搜索不同的rss标题,这些标题填充ns url数组中的tableview单元格我在这里的代码

     // 

    #import "SocialMasterViewController.h"

    #import "SocialDetailViewController.h"

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

    @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];

self.mySearchBar.delegate = self;
self.myTableView.delegate = self;
self.myTableView.dataSource = self;


feeds = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:@"http://rssmix.com/u/3747019/rss.xml"
        ];
parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldResolveExternalEntities:NO];
[parser parse];


    }



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

    #pragma mark - Table View

    // table view and my data source's and delegate methods......

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



    - (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;

static NSString *CellIdentifier =@"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];

        }
    }


    @end

顺便说一下这是我的masterviewcontroller.m文件代码

期待您的回复:)

1 个答案:

答案 0 :(得分:0)

只要您的搜索栏发生更改,您就希望更新表格视图的内容。 因此,首先过滤url字符串,然后通过重新加载数据来更新tableView。

1)在搜索栏发生变化时拨打电话:

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

2)过滤你想要展示的字符串

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

3)重新加载表数据(需要更改行数和数据源)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if ([self.mySerchBar.text isEqualToString:@""] || self.mySearchBar.text == NULL) {
        return totalStrings.count;
    }
    else {
        return filteredStrings.count;
    }
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
    }

    if ([self.mySearchBar.text isEqualToString:@""]|| self.mySearchBar.text == NULL)
    {
        cell.textLabel.text = [totalStrings objectAtIndex:[indexPath row]];
    }
    else {
        cell.textLabel.text = [filteredStrings objectAtIndex:[indexPath row]];
    }
    return cell;
}