2012-07-15 18 views
5

खोजते समय इंडेक्स बार छुपाएं मैंने अपने टेबल व्यू के लिए एक खोज बार और अनुक्रमणिका क्षमता लागू की है। अच्छी तरह से काम कर रहा है। हालांकि, मैंने देखा कि जब मैं खोज बार में क्लिक करता हूं, तो सूचकांक अभी भी उपलब्ध है और उस पर क्लिक करने से अप्रत्याशित परिणाम मिलते हैं। इसे डीबग करने के बजाय, मैंने सोचा कि इंडेक्स को छिपाना आसान होगा :)UITableView

मुझे sectionIndexTitlesForSectionView पर कॉल करने और शून्य लौटने के लिए कहीं और संदर्भ मिले। इसलिए, जब मैं खोज बॉक्स में क्लिक करता हूं, searchBarTextDidBeginEditing में मैंने [self sectionIndexTitlesForSectionView:[self tableView]] पर एक स्पष्ट कॉल किया है।

परिणाम यह है कि sectionIndexTitlesForSectionView आक्रमण और वापस लौटाता है, लेकिन सूचकांक अभी भी मौजूद है।

किसी भी विचार/सुझाव की सराहना की जाएगी! टोनी।

+0

कोई टिप्पणी, कृपया? – Tony

+0

अभी भी उम्मीद है कि कोई मेरी मदद कर सकता है। धन्यवाद। – Tony

उत्तर

0

जब आप खोज परिणामों को प्रदर्शित कर रहे हैं तो बस (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView वापसी nil करें।

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
    if (tableView == [self tableView]) { 
     return [[NSArray arrayWithObject:UITableViewIndexSearch] arrayByAddingObjectsFromArray:[collation sectionIndexTitles]]; 
    } 
    // search view, no index: 
    else return nil; 
} 
+0

सुझाव के लिए धन्यवाद, मार्सेल। हो सकता है कि मैं पर्याप्त स्पष्ट नहीं था - मैं भी शून्य लौट रहा हूं - मैंने डीबगर में पुष्टि की है कि इस समारोह से शून्य वापस लौटाया जा रहा है - हालांकि, सूचकांक अभी भी प्रदर्शित है। – Tony

+0

तब मुझे लगता है कि मैं समस्या को अच्छी तरह समझ नहीं पा रहा हूं। यदि आप कुछ कोड पोस्ट करेंगे तो शायद सबसे अच्छा। –

+0

कोड यह रहा: '- (NSArray *) sectionIndexTitlesForTableView: (UITableView *) tableView { // अगर उसकी खोज करने वाले सूचकांक प्रदर्शित करने के लिए कोई जरूरत नहीं है, तो (isSearchOn) वापसी नहीं के बराबर; अन्य { // सुनिश्चित करें कि इंडेक्स खोज बार इनपुट फ़ील्ड को ओवरलैप नहीं करता है [(आईडी) खोजबार सेटकंटेंट इन्सेट: UIEdgeInsetsMake (5, 0, 5, 35)]; वापस अंग्रेजी इंडेक्स; } } ' – Tony

23

आप - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView यदि आप खोज सक्रिय है, के रूप में आप अपनी पोस्ट में ध्यान दें में नहीं के बराबर वापस लौटाना होगा:

मेरे मामले में, यह कुछ इस तरह लग रहा है। फिर, सूचकांक रीफ्रेश करने के लिए UISearchDisplayDelegate से दो विधियों को ओवरराइड करें।

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller { 
    [self.tableView reloadSectionIndexTitles]; 
} 

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller { 
    [self.tableView reloadSectionIndexTitles]; 
} 

sectionIndexTitlesForTableView विधि के लिए, मैं का उपयोग करना पसंद:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
    if (self.searchDisplayController.active) { 
     return nil; 
    } else { 
     //Add @"{search}", to beginning to add search icon to top of index 
     return @[@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", @"#"]; 
    } 
} 

नोट: मैंने पाया कि आप अगर हालत में self.searchDisplayController.active उपयोग करना चाहिए। यदि आप tableView != self.tableView का उपयोग करते हैं तो यह काम नहीं करता है।

0

यदि आप सेक्शन इंडेक्सटिटल्सफॉरटेबल व्यू में शून्य पास नहीं करना चाहते हैं, तो यहां सरल तरीका है, यदि आपको खोज टेक्स्ट के लिए केवल एक इंडेक्स बनाना है और सेक्शन हेडर शीर्षक के रूप में खोज टेक्स्ट दिखाना है।

NSArray *subViewsOfTblView = [self.tableView subviews]; 
if([subViewsOfTblView count] > 0) 
{ 
    UIView *indexVw = (UIView*)subViewsOfTblView[[subViewsOfTblView count] - 1]; 
    if(isSearchON || isFilterON) 
     indexVw.hidden = YES; 
    else 
     indexVw.hidden = NO; 
}