2016-10-14 113 views
0

我是iOS中的新手,我在搜索后遇到了有关获取数组ID的问题。我需要在搜索后得到数组的实际值,但是当我搜索数组的内容时,它会给出当前在tableview中的数组索引。我的代码是这样的:如何获得实际价值的NSMutableArray不索引目标c中的UITableview中

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    arrOfColor=[NSMutableArray arrayWithObjects:@"Red",@"Green",@"Blue",@"Gray",@"Black",@"White",@"Yellow",@"Brown",@"Pink",nil]; //Hear arrofColor is NSMutableArray. 
    idarray2 =[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil]; //Hear idarray is NSMutableArray. 

    [self.searchTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 
} 

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if(isFilter) 
    { 
     return [searchArray count]; 
    } 
    else 
     return [arrOfColor count]; 
} 
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if(!cell) 
    { 
     cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 
    if(isFilter) 
    { 
     cell.textLabel.text=[searchArray objectAtIndex:indexPath.row]; 
    } 
    else 
    { 
     cell.textLabel.text=[arrOfColor objectAtIndex:indexPath.row]; 
    } 

    return cell; 
} 
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(isFilter) 
    { 
     _searchTextField.text=[searchArray objectAtIndex:indexPath.row]; 
     idlbl.text=[idarray2 objectAtIndex:indexPath.row]; 

    } 
    else 
    { 
     _searchTextField.text=[arrOfColor objectAtIndex:indexPath.row]; 
     idlbl.text=[idarray2 objectAtIndex:indexPath.row]; 

    } 

} 

-(void)textFieldDidChange:(UITextField *)textField 
{ 
    searchTextString=textField.text; 
    [self updateSearchArray:searchTextString]; 
} 
-(void)updateSearchArray:(NSString *)searchText 
{ 
    if(searchText.length==0) 
    { 
     isFilter=NO; 
    } 
    else{ 

     isFilter=YES; 
     searchArray=[[NSMutableArray alloc]init]; 
     for(NSString *string in arrOfColor){ 

      NSRange stringRange=[string rangeOfString:searchText options:NSCaseInsensitiveSearch]; 
      if(stringRange.location !=NSNotFound){ 

       [searchArray addObject:string]; 
      } 
     } 
     [self.colorTableview reloadData];} 
} 

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return YES; 
} 

enter image description here

前阵的搜索值是6

enter image description here

但是当我搜索它,它的ID更改为1

所以,即使在搜索后我怎样才能得到6个ID。提前致谢!

+0

[目标C从NSMutableArray中获取错误ID]的可能的复制(http://stackoverflow.com/questions/39993989/getting -wrong-id-from-nsmutablearray-in-objective-c) –

+0

如何打印该ID? – Lion

+0

@HimanshuMoradiya但这个问题没有解决我的问题,这就是为什么我问。 – Muju

回答

2

你必须创建一个新的数组。 一个示例代码:

NSMutableArray *arrOfColor=[NSMutableArray arrayWithObjects:@"Red",@"Green",@"Blue",@"Gray",@"Black",@"White",@"Yellow",@"Brown",@"Pink",nil]; //Hear arrofColor is NSMutableArray. 
NSMutableArray *idarray2 =[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil]; 

NSMutableArray *searchArrayColor =[[NSMutableArray alloc]init]; 
NSMutableArray *searchArrayId  =[[NSMutableArray alloc]init]; 


for(NSString *string in arrOfColor){ 

    NSRange stringRange=[string rangeOfString:@"r" options:NSCaseInsensitiveSearch]; 
    if(stringRange.location !=NSNotFound){ 
     [searchArrayColor addObject:string]; 

     NSInteger index = [arrOfColor indexOfObject:string]; 

     [searchArrayId addObject:[idarray2 objectAtIndex:index]]; 
    } 
} 

NSLog(@"%@",arrOfColor); 

/*2016-10-14 12:15:44.618 objC[1855:50348] (
              Red, 
              Green, 
              Blue, 
              Gray, 
              Black, 
              White, 
              Yellow, 
              Brown, 
              Pink 
             )*/ 

NSLog(@"%@",idarray2); 

/*2016-10-14 12:15:44.619 objC[1855:50348] (
              1, 
              2, 
              3, 
              4, 
              5, 
              6, 
              7, 
              8, 
              9 
             )*/ 

NSLog(@"==========="); 

NSLog(@"%@",searchArrayColor); 
/* 
2016-10-14 12:15:44.619 objC[1855:50348] (
Red, 
Green, 
Gray, 
Brown 
) 
*/ 


NSLog(@"%@",searchArrayId); 
/* 
2016-10-14 12:15:44.619 objC[1855:50348] (
1, 
2, 
4, 
8 
) 
*/ 
+0

非常感谢。你的代码工作完美。 – Muju

2

所以就表明id一样,

idlbl.text=[idarray2 objectAtIndex:indexPath.row]; 

,你在你的问题评论说,那么它肯定会打印1因为毕竟搜索您tableview只有one row所以,indexPath.row将为0,所以[idarray2 objectAtIndex:indexPath.row];表示idarray2的第一个对象,它是1。所以,它会返回1

现在如果你想相关的ID,那么你可以这样做,

NSUInteger index = [arrOfColor indexOfObject:@"white"]; // pass color here i have take static value for demonstration you should pass dynamic value depend on search 


    NSString *yourId = [idarray2 objectAtIndex:index]; 

    idlbl.text=yourId; 
+0

谢谢您的代码也运行。 – Muju

+0

不客气..... :) – Lion

相关问题