UITableView हेडर अनुभाग को अनुकूलित करें


141

मैं UITableViewप्रत्येक अनुभाग के लिए हेडर को अनुकूलित करना चाहता हूं । अब तक, मैंने लागू किया है

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

यह UITabelViewDelegateविधि। मैं जो करना चाहता हूं वह प्रत्येक अनुभाग के लिए वर्तमान हेडर प्राप्त करना है और बस UILabelएक सबव्यू के रूप में जोड़ना है ।

अब तक, मैं इसे पूरा करने में सक्षम नहीं हूं। क्योंकि, मुझे डिफॉल्ट सेक्शन हेडर पाने के लिए कुछ भी नहीं मिला। पहला सवाल, क्या डिफॉल्ट सेक्शन हेडर पाने का कोई तरीका है ?

यदि यह संभव नहीं है, तो मुझे एक कंटेनर दृश्य बनाने की आवश्यकता है जो कि एक है UIView, लेकिन इस बार मुझे डिफ़ॉल्ट पृष्ठभूमि रंग, छाया रंग आदि सेट करने की आवश्यकता है, क्योंकि यदि आप अनुभाग के हेडर में ध्यान से देखते हैं, तो यह पहले से ही अनुकूलित है।

मैं प्रत्येक अनुभाग हेडर के लिए ये डिफ़ॉल्ट मान कैसे प्राप्त कर सकता हूं?

आप सभी को धन्यवाद।


1
उपयोग करने में क्या गलत है tableView:titleForHeaderInSection:?
बॉनरडेन

यह एक देता है NSString, मैं कस्टम फ़ॉन्ट ताकि निर्धारित करने की आवश्यकता, मैं अगर मैं उपयोग नहीं कर सकतेtableView:titleForHeaderInSection:
Limon

या आप डिफ़ॉल्ट अनुभाग हेडर की नकल करने के लिए छवियों का उपयोग कर सकते हैं। teehanlax.com/blog/ios-6-gui-psd-iphone-5
डेसडेनोवा

@limon: सेक्शन हेडर कैसे लागू करें: stackoverflow.com/a/32261262/1457385
shallowThought

जवाबों:


288

आप यह कोशिश कर सकते हैं:

 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 18)];
    /* Create custom view to display section header... */
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, tableView.frame.size.width, 18)];
    [label setFont:[UIFont boldSystemFontOfSize:12]];
     NSString *string =[list objectAtIndex:section];
    /* Section header is in 0th index... */
    [label setText:string];
    [view addSubview:label];
    [view setBackgroundColor:[UIColor colorWithRed:166/255.0 green:177/255.0 blue:186/255.0 alpha:1.0]]; //your background color...
    return view;
}

अपने बीजी रंग वेट्वर रंग को आप जिस पर सेट करना चाहते हैं, उसे करें
लोचन रघुपति

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

15
हे डिजिटल रंग मीटर
लोचना रघुपति

सुनिश्चित करें कि UILabel का बैकग्राउंडर भी सेट करें। मुझे पता है कि जब मेरी पृष्ठभूमि मेरे लिए स्पष्ट नहीं हो रही थी तो मैं थोड़ा उलझन में था।
शम्मी

3
लाइन NSString में क्या सूची है * string = [सूची objectAtIndex: अनुभाग]; मुझे कोई भी बता सकता है
निशा गुप्ता

45

उपयोग कर चयनित उत्तर tableView :viewForHeaderInSection:सही है।

बस यहां एक टिप साझा करने के लिए।

यदि आप स्टोरीबोर्ड / xib का उपयोग कर रहे हैं, तो आप एक और प्रोटोटाइप सेल बना सकते हैं और इसे अपने "सेक्शन सेल" के लिए उपयोग कर सकते हैं। शीर्ष लेख को कॉन्फ़िगर करने का कोड समान है कि आप पंक्ति कक्षों के लिए कैसे कॉन्फ़िगर करते हैं।

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    static NSString *HeaderCellIdentifier = @"Header";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:HeaderCellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:HeaderCellIdentifier];
    }

    // Configure the cell title etc
    [self configureHeaderCell:cell inSection:section];

    return cell;
}

14
गलत w / इस समाधान में कई चीजें हैं। इनमें से पहला तथ्य यह है कि यदि आप "tableView (tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> बूल" को लागू करते हैं, तो आप देखेंगे कि जब आप स्लाइड करेंगे तो अनुभाग शीर्षलेख पंक्ति के साथ चलेगा। इससे बचने के लिए, आपको इसके बजाय cell.contentView वापस करना होगा। बड़ा मुद्दा यह है कि इस समाधान के साथ, जब आप अनुभाग शीर्ष लेख को दबाएंगे तो ऐप क्रैश हो जाएगा। सही तरीका यह है कि यूआईटेबल व्यूहैडरफुटेरव्यू का विस्तार करने वाला एक एनआईबी बनाया जाए, इसे डब्ल्यू / टेबलव्यू रजिस्टर करें और इस पद्धति में वापस लौटाएं। IOS8 पर परीक्षण किया गया
काच्ची

@ काची समाधान का उपयोग viewForHeaderInSectionनहीं है canEditRowAtIndexPathजैसा कि आपने उल्लेख किया है। मैंने आपके द्वारा बताए गए क्रैश को कभी सत्यापित नहीं किया, लेकिन क्या आप बता सकते हैं कि एक लंबे प्रेस से दुर्घटना कैसे होगी?
समवेत करें

1
मेरा आशय यह था कि यदि आप इस समाधान को लागू करते हैं और canEditRowAtIndexPath लागू करते हैं, तो आप देखेंगे कि शीर्ष लेख उस शीर्ष पंक्ति के साथ भी स्लाइड करेगा जिसे आप हटा रहे हैं यदि आप cell.contentView को वापस नहीं करते हैं। इस SO पोस्ट को देखें: stackoverflow.com/questions/26009722/… लॉन्ग प्रेस एक दुर्घटना का कारण बनता है क्योंकि एक संदेश डीलडॉक की गई वस्तु पर भेजे जाने की कोशिश करता है। इस SO पोस्ट को देखें: stackoverflow.com/questions/27622290/…
काची सेप

1
कृपया कभी भी UITableViewCellहेडर दृश्य के रूप में उपयोग न करें । आपको विज़ुअल ग्लिट्स को डीबग करना बहुत मुश्किल होगा - हेडर कभी-कभी गायब हो जाते हैं क्योंकि सेल कैसे ख़राब हो जाते हैं और आप घंटों देख रहे होंगे कि ऐसा क्यों होता है जब तक आपको एहसास UITableViewCellनहीं होता है कि UITableViewहेडर में नहीं है ।
raven_raven

UITableViewCellहेडर के रूप में उपयोग करना गलत है।
एलेक्स ज़ावाटोन

31

लोचन तेजस का स्विफ्ट संस्करण उत्तर:

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let view = UIView(frame: CGRectMake(0, 0, tableView.frame.size.width, 18))
    let label = UILabel(frame: CGRectMake(10, 5, tableView.frame.size.width, 18))
    label.font = UIFont.systemFontOfSize(14)
    label.text = list.objectAtIndex(indexPath.row) as! String
    view.addSubview(label)
    view.backgroundColor = UIColor.grayColor() // Set your background color

    return view
}

1
दृश्य के अंदर पाठ के अनुसार लेबल की ऊँचाई को कैसे गतिशील बनाया जाए?
प्रतीक शाह

overrideकीवर्ड अनावश्यक है। क्या अधिक है, हेडर के विचारों को फिर से बनाने के बजाय पुन: उपयोग करने पर विचार करें।
वादिम बुलविन

17

यदि आप डिफ़ॉल्ट हेडर दृश्य का उपयोग करते हैं तो आप केवल उस पर पाठ को बदल सकते हैं

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

स्विफ्ट के लिए:

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

यदि आप उस दृश्य को कस्टमाइज़ करना चाहते हैं जिसे आपको एक नया स्वयं बनाने की आवश्यकता है।


10

UITableViewHeaderFooterView का उपयोग क्यों नहीं किया जाता है ?


आप इसका उपयोग केवल तभी कर सकते हैं जब आप उपयोग नहीं करते हैं - (UIView *) tableView: (UITableView *) tableView viewForHeaderInSection: (NSInteger) अनुभाग।
SAHM

1
बिल्कुल सही जवाब। इसके अलावा, UITableViewHeaderFooterView का उपयोग करके सेल की तरह ही रीसाइक्लिंग को देखें।
ग्रेगोजो

6
@ वरसी मुझे उनके पदावनत होने का कोई सबूत नहीं मिला है।
फॉक्स

8

अगर शीर्षलेख प्रदर्शित नहीं होता है, तो यह कोशिश कर सकते हैं।

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 45;
}

यह दिए गए सेक्शन के हेडर के लिए एक ऊँचाई देता है।


1
मन अपने जवाब को विस्तृत?
CinCout

जब तक आप किसी विधि के साथ निर्दिष्ट नहीं करते हैं तब तक हेडर अनुभाग अभ्यस्त नहीं दिखता है। यदि ऊँचाई निर्दिष्ट नहीं है, तो हेडर नहीं दिखाना यूआईटेबल व्यू डिफॉल्ट करता है। @CinCout
theprojectabot

6

लोचन और एस्टेमेडोन्ज़ा उत्तर के 3 संस्करण स्विफ्ट:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let view = UIView(frame: CGRect(x:0, y:0, width:tableView.frame.size.width, height:18))
    let label = UILabel(frame: CGRect(x:10, y:5, width:tableView.frame.size.width, height:18))
    label.font = UIFont.systemFont(ofSize: 14)
    label.text = "This is a test";
    view.addSubview(label);
    view.backgroundColor = UIColor.gray;
    return view

}

यह भी सलाह दी जाती है कि आपको ALSO लागू करना होगा:

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 100;
}

5

इसे इस्तेमाल करे......

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) 
{
    // Background view is at index 0, content view at index 1
    if let bgView = view.subviews[0] as? UIView
    {
        // do your stuff
    }

    view.layer.borderColor = UIColor.magentaColor().CGColor
    view.layer.borderWidth = 1
}

5

अन्य उत्तर डिफ़ॉल्ट हेडर दृश्य को पुनः बनाने का एक अच्छा काम करते हैं, लेकिन वास्तव में आपके मुख्य प्रश्न का उत्तर नहीं देते हैं:

क्या डिफ़ॉल्ट अनुभाग शीर्ष लेख प्राप्त करने का कोई तरीका है?

एक तरीका है - बस tableView:willDisplayHeaderView:forSection:अपने प्रतिनिधि में लागू करें। डिफ़ॉल्ट हेडर दृश्य को दूसरे पैरामीटर में पारित किया जाएगा, और वहां से आप इसे एक के रूप में डाल सकते हैं UITableViewHeaderFooterViewऔर फिर अपनी इच्छानुसार साक्षात्कार जोड़ / बदल सकते हैं।

Obj सी

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view;

    // Do whatever with the header view... e.g.
    // headerView.textLabel.textColor = [UIColor whiteColor]
}

तीव्र

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
{
    let headerView = view as! UITableViewHeaderFooterView

    // Do whatever with the header view... e.g.
    // headerView.textLabel?.textColor = UIColor.white
}

आपको इसे कास्ट करने की आवश्यकता नहीं है। आप सिर्फ वही जोड़ सकते हैं जो आप देखना चाहते हैं। वास्तव में, एक नई वस्तु बनाने से कुछ भी नहीं होगा जब तक आप इसे असाइन नहीं करते हैं view
एलेक्स ज़ाटावोन

@AlexZavatone यह सही है, अगर आप सिर्फ विचार जोड़ रहे हैं तो आपको इसे कास्ट करने की आवश्यकता नहीं है। यदि आप पाठ लेबल जैसे कुछ डिफ़ॉल्ट दृश्यों को अनुकूलित करना चाहते हैं तो यह उपयोगी है।
क्रेग ब्राउन

4
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    //put your values, this is part of my code
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 30.0f)];
    [view setBackgroundColor:[UIColor redColor]];
    UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 5, 150, 20)];
    [lbl setFont:[UIFont systemFontOfSize:18]];
    [lbl setTextColor:[UIColor blueColor]];
    [view addSubview:lbl];

    [lbl setText:[NSString stringWithFormat:@"Section: %ld",(long)section]];

    return view;
}

4

यह सबसे आसान उपाय संभव है। कस्टम कोड हेडर बनाने के लिए सीधे निम्नलिखित कोड का उपयोग किया जा सकता है।

 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    SectionHeaderTableViewCell *headerView = [tableView dequeueReusableCellWithIdentifier:@"sectionHeader"];

    //For creating a drop menu of rows from the section
    //==THIS IS JUST AN EXAMPLE. YOU CAN REMOVE THIS IF-ELSE.==
    if (![self.sectionCollapsedArray[section] boolValue])
    {
        headerView.imageView.image = [UIImage imageNamed:@"up_icon"];
    }
    else
    {
        headerView.imageView.image = [UIImage imageNamed:@"drop_icon"];
    }

    //For button action inside the custom cell
    headerView.dropButton.tag = section;
    [headerView.dropButton addTarget:self action:@selector(sectionTapped:) forControlEvents:UIControlEventTouchUpInside];

    //For removing long touch gestures.
    for (UIGestureRecognizer *recognizer in headerView.contentView.gestureRecognizers)
    {
        [headerView.contentView removeGestureRecognizer:recognizer];
        [headerView removeGestureRecognizer:recognizer];
    }

    return headerView.contentView;
}

नोट: SectionHeaderTableViewCell स्टोरीबोर्ड में बनाया गया एक कस्टम UITableViewCell है।


सेक्शनहैडरटेबल व्यूसेल - अघोषित पहचानकर्ता का उपयोग
बोरिस

@BorisGafurov SectionHeaderTableViewCell सिर्फ एक उदाहरण का नाम है जिसे मैंने अपना UITableViewCell दिया है, जिसे मैंने स्टोरीबोर्ड में बनाया है।
अनीश कुमार

2

अगर मैं तुम होते, तो मैं एक विधि बनाता, जिसमें एक उविवि को एक एनएसएसट्रिंग दिया जाता है जिसमें निहित है। उदाहरण के लिए

+ (UIView *) sectionViewWithTitle:(NSString *)title;

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


हां, मैं ऐसा कर सकता हूं, लेकिन मेरा सवाल यह है कि मैं डिफ़ॉल्ट अनुभाग हेडर पृष्ठभूमि, छाया मूल्य कैसे प्राप्त कर सकता हूं, बाकी को लागू करना आसान है।
Limon

आपको डिफ़ॉल्ट अनुभाग हेडर बैकग्राउंड से क्या मतलब है
लोचन रघुपति

1
खैर, सबसे आसान होगा डिजिटल कलर मीटर एप्लिकेशन का उपयोग करें ताकि आपको मनचाहे रंग मिल सकें। कोड द्वारा उन्हें लेना कठिन होगा, जहां तक ​​मैं बता सकता हूं ...
cpprulez

2

@ स्विफ्ट में समाधान का नमूना (इसलिए उसे आगे बढ़ाएं!)। शीर्ष लेख / पाद लेख वर्गों के लिए भी एक ही पुनर्चक्रण तंत्र का उपयोग करते हुए शानदार:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let settingsHeaderSectionCell:SettingsHeaderSectionCell = self.dequeueReusableCell(withIdentifier: "SettingsHeaderSectionCell") as! SettingsHeaderSectionCell

    return settingsHeaderSectionCell
}

2
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    if([view isKindOfClass:[UITableViewHeaderFooterView class]]){

        UITableViewHeaderFooterView *headerView = view;

        [[headerView textLabel] setTextColor:[UIColor colorWithHexString:@"666666"]];
        [[headerView textLabel] setFont:[UIFont fontWithName:@"fontname" size:10]];
    }
}

यदि आप अपने सेक्शन हेडर में टेक्स्टलेबेल के फॉन्ट को बदलना चाहते हैं, तो आप इसे विलडिसहैडी व्यू में करना चाहते हैं। पाठ सेट करने के लिए आप इसे व्यूफ़ॉरहेडइनइन्फेक्शन या टाइटलफ़ॉरहेडरइनसेक्शन में देख सकते हैं। सौभाग्य!


2

पूर्ण 2019 का उदाहरण कॉपी और पेस्ट करने के लिए

स्टोरीबोर्ड पर पहला सेट "समूहीकृत": यह init समय पर होना है, आप वास्तव में इसे बाद में सेट नहीं कर सकते, इसलिए स्टोरीबोर्ड पर इसे करना याद रखना आसान है:

यहां छवि विवरण दर्ज करें

आगे,

Apple बग के कारण heightForHeaderInSection को लागू करना चाहिए

func tableView(_ tableView: UITableView,
                   heightForHeaderInSection section: Int) -> CGFloat {
    return CGFloat(70.0)
}

अभी भी एक Apple बग है - दस साल के लिए - जहां यह आपके पास पहला हेडर नहीं दिखाएगा (यानी, इंडेक्स 0) अगर आपके पास नहीं है heightForHeaderInSection कॉल ।

तो, tableView.sectionHeaderHeight = 70बस काम नहीं करता है, यह टूट गया है

एक फ्रेम सेट करने से कुछ नहीं होता है:

में viewForHeaderInSection बस एक UIView बनाने ()।

यह व्यर्थ है / यदि आपको UIView (फ्रेम ...) कुछ भी प्राप्त नहीं होता है बाद से iOS केवल तालिका द्वारा निर्धारित दृश्य के आकार को निर्धारित करता है।

तो पहली पंक्ति viewForHeaderInSectionबस होगी let view = UIView()और वह दृश्य है जो आप वापस लौटेंगे।

func tableView(_ tableView: UITableView,
                       viewForHeaderInSection section: Int) -> UIView? {
    let view = UIView()
    
    let l = UILabel()
    view.addSubview(l)
    l.bindEdgesToSuperview()
    l.backgroundColor = .systemOrange
    l.font = UIFont.systemFont(ofSize: 15)
    l.textColor = .yourClientsFavoriteColor
    
    switch section {
    case 0:
        l.text =  "First section on screen"
    case 1:
        l.text =  "Here's the second section"
    default:
        l.text =  ""
    }
    
    return view
}

वह यह है - कुछ भी एक समय बर्बाद है।

एक और "उधम मचाते" Apple मुद्दा।


ऊपर इस्तेमाल किया गया सुविधा विस्तार है:

extension UIView {
    
    // incredibly useful:
    
    func bindEdgesToSuperview() {
        
        guard let s = superview else {
            preconditionFailure("`superview` nil in bindEdgesToSuperview")
        }
        
        translatesAutoresizingMaskIntoConstraints = false
        leadingAnchor.constraint(equalTo: s.leadingAnchor).isActive = true
        trailingAnchor.constraint(equalTo: s.trailingAnchor).isActive = true
        topAnchor.constraint(equalTo: s.topAnchor).isActive = true
        bottomAnchor.constraint(equalTo: s.bottomAnchor).isActive = true
    }
}

1

जादुई रूप से टेबल व्यू हैडर को स्विफ्ट में जोड़ें

हाल ही में मैंने यह कोशिश की।

मुझे पूरे यूआईटेबल व्यू में एक और केवल एक हेडर की जरूरत थी।

जैसे मैं टेबल व्यू के शीर्ष पर एक UIImageView चाहता था। इसलिए मैंने UITableViewCell के शीर्ष पर एक UIImageView जोड़ा और स्वचालित रूप से इसे एक TableViewHeader के रूप में जोड़ा गया। अब मैं ImageView को ViewController से जोड़ता हूं और छवि को जोड़ा।

मैं उलझन में था क्योंकि मैंने पहली बार ऐसा कुछ किया था। तो मेरे भ्रम को दूर करने के लिए मेनस्टोरीबोर्ड के xml प्रारूप को खोलें और पाया कि इमेज व्यू को हेडर के रूप में जोड़ा गया था।

इसने मेरे लिए काम किया। धन्यवाद xCode और स्विफ्ट।


1

इस प्रतिनिधि विधि को बुलाओ

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

return @"Some Title";
}

यह डायनेमिक शीर्षक के साथ डिफ़ॉल्ट हेडर को स्वचालित रूप से जोड़ने का मौका देगा।

आप पुन: प्रयोज्य और अनुकूलन हेडर / पाद का उपयोग कर सकते हैं।

https://github.com/sourov2008/UITableViewCustomHeaderFooterSection


1

स्वाइप 4.2

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    guard let header = view as? UITableViewHeaderFooterView else { return }

    header.textLabel?.textAlignment = .center // for all sections

    switch section {
    case 1:  //only section No.1
        header.textLabel?.textColor = .black
    case 3:  //only section No.3
        header.textLabel?.textColor = .red
    default: //
        header.textLabel?.textColor = .yellow
    }
}


0

यदि आप तालिका में शीर्षक जोड़ना चाहते हैं, तो शीर्ष लेख न जोड़ें। स्विफ्ट 3.x में कोड इस प्रकार है:

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    var lblStr = ""
    if section == 0 {
        lblStr = "Some String 1"
    }
    else if section == 1{
        lblStr = "Some String 2"
    }
    else{
        lblStr = "Some String 3"
    }
    return lblStr
}

शीर्ष लेख के लिए शीर्षक लाने के लिए आप एक सरणी को लागू कर सकते हैं।


0

मूल प्रश्न पर वापस जा रहे हैं (4 साल बाद), अपने स्वयं के हेडर को फिर से बनाने के बजाय, iOS बस आपको कॉल कर सकता है (willDisplayHeaderView के साथ: forSection :) अधिकार के बाद यह डिफ़ॉल्ट एक बनाया जाता है। उदाहरण के लिए, मैं अनुभाग शीर्ष लेख के दाईं ओर एक ग्राफ़ बटन जोड़ना चाहता था:

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
    UITableViewHeaderFooterView * header = (UITableViewHeaderFooterView *) view;
    if (header.contentView.subviews.count >  0) return; //in case of reuse
    CGFloat rightEdge = CGRectGetMaxX(header.contentView.bounds);
    UIButton * button = [[UIButton alloc] initWithFrame:CGRectMake(rightEdge - 44, 0, 44, CGRectGetMaxY(header.contentView.bounds))];
    [button setBackgroundImage:[UIImage imageNamed:@"graphIcon"] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(graphButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [view addSubview:button];
}

0

उपयोग tableView: willDisplayHeaderView:जब यह प्रदर्शित होने वाला हो, तो दृश्य को कस्टमाइज़ करने के लिए ।

यह आपको हेडर दृश्य के लिए पहले से बनाए गए दृश्य को लेने में सक्षम होने का लाभ देता है और पूरे हेडर दृश्य को स्वयं को फिर से बनाने के बजाय इसे बढ़ाता है।

यहां एक उदाहरण दिया गया है कि BOOL पर आधारित हेडर सेक्शन को कलर करता है और हेडर में एक डिटेल टेक्स्ट एलिमेंट जोड़ता है।

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
//    view.tintColor = [UIColor colorWithWhite:0.825 alpha:1.0]; // gray
//    view.tintColor = [UIColor colorWithRed:0.825 green:0.725 blue:0.725 alpha:1.0]; // reddish
//    view.tintColor = [UIColor colorWithRed:0.925 green:0.725 blue:0.725 alpha:1.0]; // pink

    // Conditionally tint the header view
    BOOL isMyThingOnOrOff = [self isMyThingOnOrOff];

    if (isMyThingOnOrOff) {
        view.tintColor = [UIColor colorWithRed:0.725 green:0.925 blue:0.725 alpha:1.0];
    } else {
        view.tintColor = [UIColor colorWithRed:0.925 green:0.725 blue:0.725 alpha:1.0];
    }

    /* Add a detail text label (which has its own view to the section header… */
    CGFloat xOrigin = 100; // arbitrary
    CGFloat hInset = 20;
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(xOrigin + hInset, 5, tableView.frame.size.width - xOrigin - (hInset * 2), 22)];

    label.textAlignment = NSTextAlignmentRight;

    [label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14.0]
    label.text = @"Hi.  I'm the detail text";

    [view addSubview:label];
}

0

स्विफ्ट 4.2

स्विफ्ट 4.2 में तालिका का नाम थोड़ा बदला हुआ है।

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let view = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 18))
        let label = UILabel(frame: CGRect(x: 10, y: 5, width: tableView.frame.size.width, height: 18))
        label.font = UIFont.systemFont(ofSize: 14)
        label.text = list.objectAtIndex(section) as! String
        view.addSubview(label)
        view.backgroundColor = UIColor.gray // Set your background color

        return view
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.