2009-09-29 24 views
10

में शून्य पंक्तियों वाली तालिका को प्रदर्शित करने के लिए कैसे मैं एक सामग्री को गतिशील रूप से UITableView में लोड कर रहा हूं। यदि डेटा है तो तालिका को डेटा प्रदर्शित करने की आवश्यकता है। यदि कोई डेटा नहीं है तो तालिका को एक सादा पृष्ठ प्रदर्शित करना चाहिए। लेकिन मेरे आवेदन में तालिका सादा पृष्ठ को दो विभाजक लाइनों के साथ प्रदर्शित करती है। मुझे इस विभाजक रेखा को हटाने और एक सादा सफेद पृष्ठ प्रदर्शित करने की आवश्यकता है। कृपया सुझाव दे?UITableView

किसी भी मदद की सराहना की जाएगी!

+0

की विभाजक लाइनों को छुपाएगा यह आसान है ... [self.tableView setTableFooterView: [UIView new]]; – Fattie

+0

ध्यान दें कि वास्तविक समाधान ** इसे "समूहबद्ध" शैली तालिका ** सेट करने के लिए बस है! ऐसा करने के लिए, बस थॉमस डेकोक्स के उत्तर पर जाएं: http://stackoverflow.com/questions/1006663/how-can-i-set-a-uitableview-to-grouped-style – Fattie

उत्तर

2

यदि आपका डेटासोर्स खाली है तो खाली स्थिति की जांच कर सकते हैं यदि तालिकादृश्य के शीर्ष पर प्लेसहोल्डर दृश्य जोड़ें। यदि वे खाली नहीं हैं, तो प्लेसहोल्डर दृश्य को हटा दें।

+0

मुझे बदसूरत हैक की तरह लगता है , और बदसूरत हैक सड़क के नीचे वास्तविक कार्यक्षमता तोड़ने के लिए जाते हैं। – PeyloW

+0

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

+0

मुझे नहीं लगता कि यह एक बदसूरत हैक क्यों है, यह कोई डेटा नहीं है, जबकि यह एक कस्टम दृश्य प्रदर्शित करने का एक तरीका है। कस्टम व्यू समझा सकता है कि कोई डेटा क्यों नहीं है और उपयोगकर्ता डेटा कैसे दर्ज कर सकता है। आईफोन (और मैक) अनुप्रयोगों में यह एक आम प्रथा है। – klaaspieter

2

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

मुझे लगता है कि आप केवल दो विभाजक लाइनों को देखते हैं क्योंकि आपकी पंक्तियां बहुत लंबी हैं?

यदि आप करते हैं वास्तव मेंUITableViewCellSeparatorStyleNone करने के लिए अपने तालिका दृश्य पर तो विभाजक लाइनों को हटाने separatorStyle संपत्ति सेट करना होगा। ध्यान दें कि यह सभी पंक्तियों को प्रभावित करेगा। इसलिए यदि आप अभी भी पंक्तियों के लिए विभाजक चाहते हैं जो मौजूद हैं, तो आपको इन विभाजक लाइनों को अपने UITableViewCell ऑब्जेक्ट्स में आकर्षित करना होगा।

26

यदि आप पाद लेख को देखते हैं तो खाली पंक्तियों के बीच विभाजक गायब हो जाएंगे।

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)]; 
myTableView.tableFooterView = view; 
+0

ग्रेट सुझाव - आईओएस 5 में मेरे लिए ठीक काम करना 5. धन्यवाद! –

+1

ध्यान दें कि 'tableFooterView' एक बरकरार संपत्ति है, इसलिए' व्यू' (ऑटो) जारी होना चाहिए। –

+0

पूरी तरह से काम करता है। आसान नहीं हो सका। – n13

0

दो कदम:

viewDidLoad

- (void)viewDidLoad 
{ 
    emptyplaceholder = [[UILabel alloc] initWithFrame:CGRectMake(80, 100, 640, 100)]; 
    emptyplaceholder.text = NSLocalizedString(@"No shift changes...", "no shift changes"); 
    emptyplaceholder.alpha = 0.2; 

    [self.view addSubview:emptyplaceholder]; 

} 

में इस कोड को जोड़ना controllerDidChangeContent में इस कोड जोड़ें:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { 
    // The fetch controller has sent all current change notifications, so tell the table view to process all updates. 

    if (self.fetchedResultsController.fetchedObjects.count > 0) 
     emptyplaceholder.hidden = YES; 
    else 
     emptyplaceholder.hidden = NO; 

    [self.tableView endUpdates]; 
} 

तो UILable जब तिथि सेल है गायब हो जाएगा जब, तालिका में कोई डेटा नहीं हटाएं, लेबल फिर से दिखाएगा।

+0

क्षमा करें, मेरा मॉडल एक तालिका दृश्य नियंत्रक है जो उसी दिनांक जानकारी के साथ है। इसलिए शब्द होना चाहिए: जब प्लेस धारक UILabel छुपाएगा जब तालिका दृश्य में "वास्तविक" तालिका दृश्य कक्ष होगा। –

1

यह समाधान @bbarnhart का उपयोग करके एकरेखीय को सरल किया जा सकता,:

myTableView.tableFooterView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; 
0

अच्छा यूआई डिजाइन UIViewController के लिए एक नया UIView जोड़ने के लिए जब कोई डेटा "कोई डाटा उपलब्ध" है वहाँ, जोड़कर यह UITableView