प्रोग्राम (iPhone / iPad) को UITableView सेक्शन शीर्षक कैसे सेट करें?


106

मैंने UITableViewइंटरफ़ेस बिल्डर का उपयोग करके बनाया है storyboards। के UITableViewसाथ सेटअप है static cellsऔर विभिन्न वर्गों की एक संख्या है।

समस्या यह है कि मैं अपने ऐप को कई अलग-अलग भाषाओं में सेटअप करने की कोशिश कर रहा हूं। ऐसा करने के लिए मुझे UITableViewकिसी तरह से अनुभाग के शीर्षक बदलने में सक्षम होना चाहिए ।

कृपया कोई मेरी मदद कर सकता है? आदर्श रूप से मैं इस मुद्दे का उपयोग करना चाहूंगा, IBOutletsहालांकि मुझे संदेह है कि यह इस मामले में भी संभव नहीं है। किसी भी सलाह और सुझाव वास्तव में सराहना की जाएगी।

अग्रिम में धन्यवाद।

जवाबों:


280

एक बार जब आप अपना यूआईटेबल व्यू delegateऔर datasourceअपने कंट्रोलर से कनेक्ट कर लेते हैं, तो आप कुछ इस तरह से कर सकते हैं:

ObjC

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

    NSString *sectionName;
    switch (section) {
        case 0:
            sectionName = NSLocalizedString(@"mySectionName", @"mySectionName");
            break;
        case 1:
            sectionName = NSLocalizedString(@"myOtherSectionName", @"myOtherSectionName");
            break;
        // ...
        default:
            sectionName = @"";
            break;
    }    
    return sectionName;
}

तीव्र

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

    let sectionName: String
    switch section {
        case 0:
            sectionName = NSLocalizedString("mySectionName", comment: "mySectionName")
        case 1:
            sectionName = NSLocalizedString("myOtherSectionName", comment: "myOtherSectionName")
        // ...
        default:
            sectionName = ""
    }
    return sectionName
}

आपको यकीन है कि वास्तव में कहा जाता है अगर आप स्थिर कोशिकाओं का उपयोग करके कहानी बोर्ड को सेट करते हैं? मुझे ऐसा नहीं लगता है कि इसे लागू किया जा रहा है।
आकर्षित किया

7
आह ऐसा लगता है जैसे आपको numberOfSectionsInTableView:tableView:इसे प्राप्त करने के लिए लागू करना होगा।
आकर्षित

स्थैतिक कोशिकाओं के लिए, (अधिकांश) अन्य सभी डेटा स्रोत विधियों को लागू नहीं किया जाता है।
wcochran

2
@ ड्रिविश numberOfSectionsInTableView:tableView:ने स्थैतिक कोशिकाओं के लिए आईबी में लागू किया।
वॉचक्रैन

आकर्षित करना सही है - यदि आप लागू करते हैं numberOfSectionsInTableView:, तो शीर्षक विधि को बुलाया जाता है और स्टोरीबोर्ड को उखाड़ फेंकता है। चूँकि यह एक स्थिर सारणी है
इसलिए

16

यदि आप स्विफ्ट में कोड लिख रहे हैं तो यह एक उदाहरण के रूप में दिखेगा

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?
{
    switch section
    {
        case 0:
            return "Apple Devices"
        case 1:
            return "Samsung Devices"
        default:
            return "Other Devices"
    }
}

10

UITableViewDataSource विधि का उपयोग करें

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

5

titleForHeaderInSection UITableView का एक प्रतिनिधि तरीका है, इसलिए इस प्रकार अनुभाग के हेडर टेक्स्ट को लागू करें,

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
              return @"Hello World";
}

3

ध्यान दें कि -(NSString *)tableView: titleForHeaderInSection:UITableView के - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionप्रतिनिधि के रूप में कार्यान्वित होने पर UITableView द्वारा नहीं बुलाया जाता है ;


2
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
   return 45.0f; 
//set height according to row or section , whatever you want to do!
}

अनुभाग लेबल पाठ सेट हैं।

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *sectionHeaderView;

        sectionHeaderView = [[UIView alloc] initWithFrame:
                             CGRectMake(0, 0, tableView.frame.size.width, 120.0)];


    sectionHeaderView.backgroundColor = kColor(61, 201, 247);

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:
                            CGRectMake(sectionHeaderView.frame.origin.x,sectionHeaderView.frame.origin.y - 44, sectionHeaderView.frame.size.width, sectionHeaderView.frame.size.height)];

    headerLabel.backgroundColor = [UIColor clearColor];
    [headerLabel setTextColor:kColor(255, 255, 255)];
    headerLabel.textAlignment = NSTextAlignmentCenter;
    [headerLabel setFont:kFont(20)];
    [sectionHeaderView addSubview:headerLabel];

    switch (section) {
        case 0:
            headerLabel.text = @"Section 1";
            return sectionHeaderView;
            break;
        case 1:
            headerLabel.text = @"Section 2";
            return sectionHeaderView;
            break;
        case 2:
            headerLabel.text = @"Section 3";
            return sectionHeaderView;
            break;
        default:
            break;
    }

    return sectionHeaderView;
}

2

अन्य उत्तरों के साथ कुछ भी गलत नहीं है, लेकिन यह एक गैर-प्रोग्रामेटिक समाधान प्रदान करता है जो उन परिस्थितियों में उपयोगी हो सकता है जहां किसी की छोटी स्थिर तालिका होती है। लाभ यह है कि कोई स्टोरीबोर्ड का उपयोग करके स्थानीयकरणों को व्यवस्थित कर सकता है। एक Xcode से XLIFF फ़ाइलों के माध्यम से स्थानीयकरणों को निर्यात करना जारी रख सकता है। Xcode 9 में स्थानीयकरण को आसान बनाने के लिए कई नए उपकरण भी हैं ।

(मूल)

मेरी भी ऐसी ही आवश्यकता थी। मेरे पास अपने Main.storyboard (बेस) में स्थिर कोशिकाओं के साथ एक स्थिर तालिका थी। .String फ़ाइलों का उपयोग करके अनुभाग शीर्षकों को स्थानीय करने के लिए। Main.strings (जर्मन) बस स्टोरीबोर्ड में अनुभाग का चयन करें और ऑब्जेक्ट आईडी नोट करें

ऑब्जेक्ट आईडी

बाद में अपने स्ट्रिंग फ़ाइल पर जाएं, मेरे मामले में Main.strings (जर्मन) और अनुवाद डालें:

"MLo-jM-tSN.headerTitle" = "Localized section title";

अतिरिक्त संसाधन:


1

मैं UITableViewप्रोटोकॉल के पिछले संस्करणों के बारे में नहीं जानता , लेकिन iOS 9 के रूप में, प्रोटोकॉल func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?का हिस्सा है UITableViewDataSource

   class ViewController: UIViewController {

      @IBOutlet weak var tableView: UITableView!

      override func viewDidLoad() {
         super.viewDidLoad()
         tableView.dataSource = self
      }
   }

   extension ViewController: UITableViewDataSource {
      func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
         return "Section name"
      }
   }

आपको delegateअपनी तालिका को डेटा से भरने की घोषणा करने की आवश्यकता नहीं है ।

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