13

नीचे मैं एक UISearchBar और UISearchDisplayController है, सब कुछ अच्छा काम करता है, लेकिन यह नीचे टेक्स्ट फ़ील्ड के बगल के बजाय मेरी गुंजाइश चयनकर्ता प्रदर्शित करता है। मुझे पता है कि यह उम्मीद कार्रवाई है तो उपकरण को लैंडस्केप में है, लेकिन यह इस तरह लग रही समाप्त होता है के बाद से मैं एक UISplitViewController के मास्टर दृश्य में UISearchBar है:फोर्स गुंजाइश बार UISearchBar

UISearchBar problem

वहाँ मजबूर करने के लिए कोई तरीका है सभी इंटरफ़ेस ओरिएंटेशन में टेक्स्ट फ़ील्ड के नीचे प्रदर्शित करने के लिए स्कोप बार (मुझे पता है कि यह आईपैड पर Mail.app में अच्छी तरह से काम करता है, इसलिए संभवतः, लेकिन कौन जानता है कि ऐप्पल ने ऐसा करने के विकल्प को छिपाने का फैसला किया है)

+0

मुझे ऐसा करने का कोई तरीका मिला, लेकिन यह एक सार्वजनिक एपीआई नहीं है। [self.searchDisplayController.searchBar setCombinesLandscapeBars: NO]; इसे खोज पर कॉल करना सुनिश्चित करें डिस्प्ले कंट्रोलर की खोजबार और यूआईएसearchBar स्वयं नहीं। स्पष्ट रूप से खोज प्रदर्शन नियंत्रक इस संपत्ति का प्रबंधन कर रहा है। – axiixc

+0

मुझे एक ही समस्या है और सेटकॉम्बिन लैंडस्केपबार्स: वास्तव में समस्या हल नहीं हुई है, लेकिन ऐप्पल का नमूना "टेबलशर्च" भी उस विधि का उपयोग किये बिना समान परिणाम प्राप्त करता है। क्या आपको एक और समाधान मिला? – nacho4d

+1

यदि आपको अस्वीकार नहीं किया जाता है तो आप इस कोड का उपयोग कर सकते हैं, अगर सेब के इंजीनियरों का फैसला होता है कि निजी विधि अब और उपलब्ध नहीं होगी, तो कोई चेतावनी और सुरक्षित नहीं फेंकता है। अगर ([self.searchDisplayController।searchBar प्रतिसाद देता है चयनकर्ता: @ चयनकर्ता (सेटकॉम्बिन लैंडस्केपबर्स :)]) { objc_msgSend (self.searchDisplayController.searchBar, @selector (setCombinesLandscapeBars :), NO);} – nacho4d

उत्तर

3

यह सार्वजनिक एपीआई का हिस्सा नहीं है। उम्मीद है कि यह भविष्य में जोड़ा जाएगा। इसे निजी एपीआई का उपयोग करके पूरा किया जा सकता है, यूआईकिट क्लास डंप के माध्यम से आपको वहां मदद मिलेगी।

शुभकामनाएं!

संपादित करें: ध्यान दें निजी API का उपयोग करके प्राप्त कर सकते हैं कि आप app की दुकान से अस्वीकार कर दिया के रूप में ज्यादातर लोगों को पहले से ही पता है।

2

मैं दिखाने के लिए और गुंजाइश बार छुपाने के लिए UISearchDisplayDelegate इस्तेमाल किया।

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller 
{ 
    [controller.searchBar setShowsScopeBar:YES]; 
} 

-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller 
{ 
    [controller.searchBar setShowsScopeBar:NO]; 
} 
1

निजी एपीआई का उपयोग न करें। इसके बजाय, आईओएस उपयोगकर्ता इंटरफेस दिशानिर्देशों से ऐप्पल की सिफारिश का पालन करें:

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

यह मैं स्टोरीबोर्ड का उपयोग कर के लिए काम किया।

0

क्यों नहीं बस अपनी खोज पट्टी programattically सेट? यहां मैं अपने वर्तमान प्रोजेक्ट पर उपयोग कर रहा हूं। जब तक उपयोगकर्ता स्क्रॉल नहीं करता है तब तक यह खोज बार को छुपाता है, और टाइपिंग आइटम शुरू करते समय स्कोप बार टेक्स्ट फ़ील्ड के नीचे लोड होता है। वहां से बस हमेशा की तरह फिल्टर करें: viewDidLoad में

- (void)setupSearchBar { 
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)]; 
self.searchBar.showsScopeBar = YES; 
self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"Users", @"Groups", nil]; 
self.tableView.tableHeaderView = self.searchBar; 

CGPoint offset = CGPointMake(0, self.searchBar.frame.size.height); 
self.tableView.contentOffset = offset; 

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar 
                  contentsController:self]; 
self.searchController.searchResultsDataSource = self; 
self.searchController.searchResultsDelegate = self; 
self.searchController.delegate = self; 
} 

कॉल [self setupSearchBar]; आप दौड़ करने वाले हैं।