2010-07-20 16 views
19

के रंग को बदलना ठीक है, मुझे पता है कि इससे पहले पूछा गया है, इसलिए कृपया मुझे फिर से पूछने के लिए क्षमा करें। ऐसा लगता है कि ऐसा करने का एक आसान तरीका होना चाहिए।UITableView सेक्शन हेडर

क्या UITableView अनुभाग शीर्षलेख पृष्ठभूमि रंग बदलने का कोई 'सरल' तरीका है? मुझे पता है कि मैं अनुभाग शीर्षलेखों के लिए उपयोग करने के लिए UITableView को कस्टम UIView को सौंपने के लिए प्रतिनिधि विधि 'viewForHeaderInSection' का उपयोग कर सकता हूं, लेकिन मैं वास्तव में करना चाहता हूं कि 'tintcolor' सेट करें। खोज बार पर एक टिंटकॉलर संपत्ति है, क्यों नहीं हैडर हेडर के लिए।

यदि मैं अपना खुद का कस्टम UIView बनाने के लिए viewForHeaderInSection का उपयोग करता हूं, तो मुझे अपना खुद का लेबल भी बनाना होगा। मुझे ऐप्पल मानक के बाकी हिस्सों की तरह दिखने के लिए अपने लेबल को स्टाइल और स्थिति बनाना है। मुझे शेष ऐप्पल मानक की तरह दिखने के लिए 'पृष्ठभूमि' शैली और आकार बनाना है।

मुझे केवल अनुभाग शीर्षलेख के लिए पूछने का तरीका नहीं मिल रहा है और फिर उसका रंग बदल सकता है। क्या मुझे कुछ याद आ रहा है या क्या मुझे वास्तव में यह कठिन तरीका करना है।

अगर मुझे यह कठिन तरीका करना है, तो क्या किसी के पास स्टाइल की सारी जानकारी है जो ऐप्पल मानक से मेल खाती है? - बार है 'पारदर्शी' - बार शीर्ष पर कुछ छायांकन है और नीचे - लेबल एक निश्चित आकार, स्थिति, छायांकन, आदि

धन्यवाद है। और एक बार फिर, इस सवाल को फिर से पूछने के लिए खेद है।

उत्तर

12

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

जैसा कि आपने कहा था, उपयोग करने की बात viewForHeaderInSection प्रतिनिधि विधि है।

यहाँ है मैं काम करता है क्या मिला और एप्पल डिफ़ॉल्ट की तरह लग रहा है:

UIView *customView = [[[UIView alloc] initWithFrame:CGRectMake(10.0, 0.0, 320.0, 22.0)] autorelease]; 
customView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"headerbackground.png"]];; 

UILabel *headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; 
headerLabel.backgroundColor = [UIColor clearColor]; 
headerLabel.opaque = NO; 
headerLabel.textColor = [UIColor whiteColor]; 
headerLabel.font = [UIFont boldSystemFontOfSize:18]; 
headerLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); 
headerLabel.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]; 
headerLabel.frame = CGRectMake(11,-11, 320.0, 44.0); 
headerLabel.textAlignment = UITextAlignmentLeft; 
headerLabel.text = @"Header Label"; 
[customView addSubview:headerLabel]; 
return customView; 

यहाँ "headerbackground.png" 1 पिक्सेल 22 पिक्सेल के द्वारा होता है (डबल कि iPhone 4 के लिए) छवि मिल जाएगा कि शीर्षलेख की लंबाई में दोहराया।

आशा है कि इससे मदद मिलती है!

+0

आईफोन 4 के लिए क्यों दोगुना है? क्या आप कृपया उस जानकारी के लिए संदर्भ दे सकते हैं .. – Anand

+1

क्योंकि आईफोन 4 में दो बार संकल्प है? तो उस उदाहरण में "headerbackground.png" 1x22 होगा, और मेरे पास "[email protected]" नामक एक और छवि भी होगी जिसका उपयोग आईफोन 4 (और अब नया आइपॉड स्पर्श) पर किया जाएगा। अधिक जानकारी के लिए यहां पढ़ें: http: //developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/SupportingResolutionIndependence/SupportingResolutionIndependence.html – neilkimmett

+0

मेरे स्वयं के स्क्रीन शॉट्स को इंगित करना इंगित करता है कि टेक्स्ट के लिए उचित बायां इंसेट है 12 पिक्सेल, 10 नहीं। ऐसा ही: CGFloat leftInset = 12.0f; UILabel * लेबल = [[UILabel alloc] initWithFrame: CGRectMake (leftInset, 0, tableSize.width - leftInset, headerImg.size.height)]; – MoDJ

29
काम करने के नए UIAppearance रास्ता साथ

, संस्करणों में> iOS 6.0 तुम सिर्फ कर सकते हैं, उदाहरण के लिए:

[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]]; 
+1

जहां मुझे इसे रखने की ज़रूरत है? – Ulaga

+0

आईओएस 10 – elsurudo

19

UIAppearance के साथ आप इस तरह अपने UITableView हेडर पर UILabel पाठ का रंग बदल सकते हैं:

[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setTextColor:[UIColor whiteColor]]; 
[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setShadowColor:[UIColor whiteColor]]; 

आईओएस 6.0+ पर काम करना चाहिए। कहीं भी कहा जा सकता है (viewDidLoad आदि)।

+1

[UITableViewHeaderFooterView क्लास] में कोई प्रभाव नहीं पड़ता है IOS 6.0 तक शून्य वापस आना चाहिए, इसलिए यह विधि 6.0 – Speakus

+0

तक काम नहीं करनी चाहिए धन्यवाद, मैंने अपना जवाब सही किया। – user882209

7

यदि आप अन्य उत्तरों की तरह दिखते हैं, तो यह आवेदन व्यापक है। तुम सिर्फ एक विशिष्ट tableview के लिए बदलना चाहते हैं, को लागू:

-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { 
    UITableViewHeaderFooterView * headerview = (UITableViewHeaderFooterView *)view; 
    headerview.contentView.backgroundColor = [UIColor greenColor]; 
    headerview.textLabel.textColor = [UIColor whiteColor]; 
} 
2

UIAppearance विधि appearanceWhenContainedIn आईओएस 9 के रूप में मान्य नहीं है।0; इसके बजाय आप अभी भी उपस्थिति के साथ सटीक वही काम कर सकते हैं जब WinContainedInInstancesOfClasses विधि और एक सरणी।

[UILabel appearanceWhenContainedInInstancesOfClasses:@[[UITableViewHeaderFooterView class]]].textColor = [UIColor darkTextColor]; 
संबंधित मुद्दे