2011-04-04 17 views
12

मेरे पास NSMutableArrayUITableView में प्रदर्शित है, और मैंने वहां कुछ तत्व जोड़े हैं।uitableview में खोजबार कैसे जोड़ें?

उदाहरण के लिए, तत्व नाम पहले, प्रथम दो, द्वितीय, द्वितीय दो, तीसरे, तीसरे दो हैं।

अब मैं स्क्रीन में एक खोज बार जोड़ना चाहता हूं। जब मैं एफ टाइप करता हूं उस खोज बार में, तालिका केवल प्रथम और प्रथम दो को दिखाना चाहिए।

मुझे यह कैसे करना चाहिए?

+0

आप UISearchController बजाय उपयोग कर सकते हैं के प्रतिनिधि विधि का उपयोग कर तालिका दृश्य के होते हैं। कोड छोड़ने के लिए https://www.raywenderlich.com/113772/uisearchcontroller- ट्यूटोरियल – PrafulD

उत्तर

17

इसका लटका पाने का सबसे अच्छा तरीका एक ट्यूटोरियल over here over here का पालन करके है। हिस्सा आप के लिए देख रहे हैं यह है:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [tableData removeAllObjects];// remove all data that belongs to previous search 
    if([searchText isEqualToString:@""]searchText==nil){ 
     [myTableView reloadData]; 
     return; 
    } 

    NSInteger counter = 0; 
    for(NSString *name in dataSource) 
    { 
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
     NSRange r = [name rangeOfString:searchText]; 
     if(r.location != NSNotFound) 
     { 
     if(r.location== 0)//that is we are checking only the start of the names. 
     { 
      [tableData addObject:name]; 
     } 
     } 

     counter++; 
     [pool release]; 

    } 

    [myTableView reloadData]; 
} 
+12

+1 क्योंकि आपका लिंक मर गया है। –

+1

एक नया लिंक जोड़ा गया। – Joetjah

+0

मुझे webservice से डेटा चाहिए। क्या मैं एक ही कोड का उपयोग कर सकता हूं? लिंक के लिए धन्यवाद। –

27
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 

searchBar.delegate = self; 

self.tableView.tableHeaderView = searchBar; 
0

मैं इसे अपने आप से किया था और यह बिल्कुल ठीक काम कर रहा है।

दो उत्परिवर्ती सरणी घोषित करें। फ़िल्टर किए गए डेटा को संग्रहीत करने के लिए सभी डेटा और दूसरा शामिल है। यहां खोजकर्ता खोज बार आउटलेट है। aray सभी डेटा भंडारण मुख्य सरणी है। सर्चबार पूंजीकरण संपत्ति को वाक्य में सेट करें ताकि यह सही तरीके से काम करे।

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [searchuser.text lowercaseString]); 
    filteredarray=[[NSMutableArray alloc]init]; 
    int l=(int)[searchuser.text length]; 
    if (l>0) 
    { 
     NSMutableString * data=[[NSMutableString alloc]init]; 
     int a=(int)[aray count]; 

     for (int i=0;i<=a-1;i++) 
     { 
      data=[aray objectAtIndex:i]; 
      if ([searchuser.text isEqualToString:data]) 
      { 
       [filteredarray addObject:data]; 
      } 
      if ([data length]>l) 
      { 
       NSMutableString * string=[[NSMutableString alloc]initWithString:[data substringWithRange:NSMakeRange(0, l)]]; 

       if ([searchuser.text isEqualToString:string]) 
       { 
        [filteredarray addObject:data]; 

       } 
      } 
     } 
    } 
    else 
    { 
     filteredarray=aray; 
    } 
    [tableview reloadData]; 
} 
1

यदि आप खोज बार का उपयोग कर रहे हैं। तो आप खोज कर सकते हैं अपने searchbar

(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
// myArray is main array for Table View 
// tempMainArray which store myArray Data 

myArray = [[NSMutableArray alloc]initWithArray:tempMainArray]; 
NSMutableArray *searchArray = [[NSMutableArray alloc]init]; 


[searchArray removeAllObjects];// remove all data that belongs to previous search 
if([searchText isEqualToString:@""]|| searchText==nil){ 

    [myArray removeAllObjects]; 
    myArray = tempMainArray; 
    [_objTableView reloadData]; 

    return; 
} 

NSInteger counter = 0; 
for(NSString *name in myArray) 
{ 

    NSRange r = [name rangeOfString:searchText]; 
    if(r.location != NSNotFound) 
    { 
     if(r.location== 0)//that is we are checking only the start of the names dynamicaly. 
     { 
      [searchArray addObject:name]; 
     } 
    } 

    counter++; 


} 

if (searchArray.count > 0) { 

    [myArray removeAllObjects]; 
    myArray = searchArray; 
    [_objTableView reloadData]; 
} 
else 
{ 
    [myArray removeAllObjects]; 
    myArray = tempMainArray; 
    [_objTableView reloadData]; 
} 

}