簡體   English   中英

將搜索欄單元格標簽鏈接到視圖控制器

[英]Link a search bar cell label to view controller

我正在嘗試在Xcode中創建一個搜索欄,因此當您搜索商品時,可以單擊搜索結果單元格,它將轉到視圖控制器,但現在要做的就是轉到海景控制器,僅顯示我單擊的單元格的標簽。

這是我的.m文件

@interface ListTableViewController () <UISearchDisplayDelegate>

@property (strong, nonatomic) NSArray *dataArray;
@property (strong, nonatomic) NSArray *searchResults;

@end

@implementation ListTableViewController

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

self.dataArray = [NSArray arrayWithObjects:@"Tomb Raider", @"Little Big Planet",     @"Unchanted 3", @"BlackOps 2", nil];
}

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

- (void)filterContentForSearchText: (NSString *) searchText
{
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", searchText];
self.searchResults = [self.dataArray filteredArrayUsingPredicate:resultPredicate];
}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString];
return YES;
}

#pragma mark - Table view data source

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:   (NSInteger)section
{
if (tableView == self.tableView) {
    return [self.dataArray count];
} else { // (tableView == self.searchDisplayController.searchResultsTableView)
    return  [self.searchResults count];
}

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

if (tableView == self.tableView) {
    cell.textLabel.text = [self.dataArray objectAtIndex:indexPath.row];
} else {
    cell.textLabel.text = [self.searchResults objectAtIndex:indexPath.row];
}
return cell;
}



#pragma mark - Table view delegate

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showDetails"]) {
    DetailsViewController *dvc = segue.destinationViewController;

    NSIndexPath *indexPath = nil;

    if ([self.searchDisplayController isActive]) {
        indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
        dvc.sendLabel = [self.searchResults objectAtIndex:indexPath.row];
        return;
    } else{
        indexPath = [self.tableView indexPathForSelectedRow];
        dvc.sendLabel = [self.dataArray objectAtIndex:indexPath.row];
        return;
    }
}
}


@end

謝謝,一切都會有所幫助。

您必須實現以下委托方法:

// Method returns the clicked row.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   YourPushedViewController *ypVC = [[YourPushedViewController alloc] initWithNibName:@"YourPushedViewController" bundle:nil];
  ypVC.selectedText = myResultArray[indexPath.row]; 


   [self.navigationController pushViewController:ypVC animated:YES]; 

}

該方法是用於選擇行並將所選結果傳遞到另一個視圖的響應。

這是對您的提示: 在視圖控制器之間傳遞數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM