16

यदि आप UISearchDisplayController का उपयोग UITableViewController के साथ करते हैं, जब उपयोगकर्ता खोज बार को टैप करता है तो यह एनएवी बार को प्रतिस्थापित करने के लिए एनिमेट करता है।मैं UISearchDisplayController का उपयोग UICollectionViewController के साथ कैसे कर सकता हूं?

मैं UICollectionViewController के शीर्ष पर UISearchBar का उपयोग करते समय वही प्रभाव प्राप्त करना चाहता हूं। कोई विचार?

+0

अरे, क्या आपने इस प्रश्न पर कोई प्रगति की है? मैं वही करने की कोशिश कर रहा हूं ... अब तक मैंने जो कुछ किया है वह सेक्शन हेडर के रूप में एक खोजबार जोड़ रहा है, लेकिन यह वास्तव में ठीक नहीं है। – aspyct

+0

मेरे पास कुछ भी नहीं मिला है :( –

+0

कोई भी ?? मैं इसका भी उपयोग कर सकता हूं ... ऐसा लगता है कि इस बिंदु पर सबसे अच्छा समाधान केवल UISearchBar/UISearchDisplayController को उपclass करना है और उन्हें सिखाएं कि UICollectionView के साथ कैसे बातचीत करें। – Raconteur

उत्तर

2

मुझे खोज बॉक्स को प्रोग्रामिक रूप से UICollectionReusableView के सबव्यूव के रूप में जोड़ना पड़ा, मैं कभी भी आईबी के माध्यम से काम नहीं कर रहा था क्योंकि आउटलेट आवंटित करते समय मुझे प्रोटोटाइप त्रुटि मिल रही थी। कार्यान्वयन फ़ाइल में खोज बार जोड़ना मेरे लिए काम किया।

प्रासंगिक विधियां निम्न हैं।

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:CellIdentifier]; 
    _objectChanges = [NSMutableArray array]; 
    _sectionChanges = [NSMutableArray array]; 
    [self performFetch]; 
    searchBar = [[UISearchBar alloc] 
        initWithFrame:CGRectMake(0.0, 50.0, self.view.bounds.size.width, 
              44.0)]; 
    searchBar.placeholder = @"Search for channels"; 
    searchBar.tintColor = [UIColor blackColor]; 
    searchBar.delegate = self; 
} 


-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 
{ 
    SupplementaryView *header = nil; 

    if ([kind isEqual:UICollectionElementKindSectionHeader]) 
    { 
     header = [self.collectionView dequeueReusableSupplementaryViewOfKind:kind 
                withReuseIdentifier:@"reuseHeader" 
                  forIndexPath:indexPath]; 

     [header addSubview:searchBar]; 

    } 
    return header; 
} 
+0

आपका 'पूरक दृश्य' क्या है? – AaoIi

1

मैं सिर्फ एक ही जांच के लिए किया था, और मैं एक आधा बेक्ड लेकिन काम कर समाधान है कि UISearchDisplayController पुनर्लेखन को शामिल नहीं करता के साथ आया था।

(अंत परिणाम: shouldReloadTableForSearchString-- के जवाब --that एक UITableView UICollectionView के शीर्ष पर आच्छादित है, एक बार आप खोज क्लिक करें, इसे खारिज कर रहा है, और आप collectionView में अपने परिणाम है पढ़ें पर अगर यह ब्याज की है।)

आईबी में मैंने एक UIViewController बनाया जिसमें मैंने डाला (स्क्रीनशॉट देखें): लेआउट उद्देश्यों के लिए एक दृश्य -> ​​जिसमें मैंने पहली बार UISearchBar और डिस्प्ले नियंत्रक को छोड़ दिया। एक ही दृश्य में (तरफ से तरफ) मैंने एक कस्टम UICollectionViewCell के साथ एक UICollectionView गिरा दिया। फिर मैंने एक UITableViewProvider (एक कस्टम UITableCell के साथ) में गिरा दिया, लेकिन इसकी आवश्यकता नहीं है, आप स्क्रीनशॉट में UITabBarItem और Nav आइटम को अनदेखा कर सकते हैं, यह अपरिहार्य है)

मैंने UITableView की ऊंचाई 0 पर सेट की है, और वायर्ड सभी आउटलेट और प्रतिनिधि, और नेट परिणाम निम्न है, जब कर्सर UISearchBox में प्रवेश करता है, UICableView ओवरले पर UITableView ओवरले, एक प्रकार के रूप में चाहिए reReloadTableForSearchString del को कॉल किया जाता है और परिणाम तालिका दृश्य में दिखाई देते हैं; SearchBarSearchButtonClicked पर मैंने बस UICollectionView के डेटा स्रोत को सेट किया है और इसके आउटलेट, और वोला पर रीलोड लोड को कॉल किया है।

एक व्यक्ति को लगता है कि ऐप्पल को खोज डिस्प्ले नियंत्रक को जेनेरिक करना चाहिए; शायद भविष्य में रिलीज में?

(यह काम करता है क्योंकि इस तरह UISearchDisplay नियंत्रक अनुकूलित है है, IIRC चरित्र प्रविष्टि एक दूसरे के ऊपर पर खड़ी प्रति एक UITableView वास्तव में नहीं है)

(क्योंकि काफ़ी शामिल कोड पोस्टिंग नहीं है; plz पूछताछ अगर कुछ भी सरल नहीं है)

enter image description here

+1

क्या आपने इसे या सिर्फ सिद्धांत लागू किया है?कृपया कौन से प्रतिनिधि तरीकों को ओवरराइड करने पर विस्तृत करें। धन्यवाद। – chandu

0

यहां केवल एक तेज कोड - मेरे लिए काम किया!

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 

    let headerView = self.mainPictureCollectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "headerView", forIndexPath: indexPath) 

    headerView.addSubview(searchBar) 
    return headerView 
}