2009-10-28 14 views
7

में "पूरी तरह से" किया गया है, मुझे लगता है कि एक स्थिर पृष्ठभूमि समस्या के साथ UITableView अच्छी तरह से प्रलेखित है, लेकिन कोई भी सीधे आगे समाधान के साथ नहीं है? इम इमारत मेरी TableViews पूरी तरह से कोड में, इस तरह:कस्टम पृष्ठभूमि छवि के साथ आईफोन UITableView PlainStyle - कोड

UIViewController *tableViewController = [[TableViewController alloc] init]; 
navigationController = [[UINavigationController alloc] 
         initWithRootViewController:tableViewController]; 
[tableViewController release]; 
[window addSubview:navigationController.view]; 

खिड़की मेरी मुख्य UIWindow एप्लिकेशन प्रतिनिधि में मेरे लिए निर्माण है। यहां से मुझे कुछ अलग TableViews (navigationController द्वारा नियंत्रित) बनाने की आवश्यकता है, कुछ fetchedResultsControllers, कस्टम कक्ष आदि के साथ। मैं इसे कोड में पूरी तरह से करना पसंद करता हूं, नबी का उपयोग नहीं करता क्योंकि इसके परिणामस्वरूप कोड और आईबी के बीच अनुकूलन फैलता है या 6+ अलग-अलग निब्स बनाने और बनाए रखने के लिए होता है।

मुझे बस एक कामकाजी उदाहरण नहीं मिल रहा है जहां tableViewController कक्षा अपनी पृष्ठभूमि छवि सेट करती है। मैं से एक के अंदर ऐसा करते हैं तो मेरी TableViews (विस्तार UITableViewController):

self.tableView.backgroundColor = backgroundColor; 

मैं, ज़ाहिर है, tableView की पृष्ठभूमि रंग का हो (जो संयोग से रंग सेल के रूप में अच्छी तरह, लगता है सेल की tableView से उनके रंग विरासत?) लेकिन मैं एक स्थिर पृष्ठभूमि छवि चाहता हूं कि मेरी कोशिकाएं ऊपर की ओर ऊपर और नीचे स्लाइड करें। एक "पृष्ठभूमि छवि" नहीं है जो उपयोगकर्ताओं के इशारे के साथ ऊपर और नीचे स्लाइड करती है। सटीक रूप से समूहबद्ध स्टाइल तालिका दृश्य क्या प्रदान करता है, लेकिन एक सादा स्टाइल तालिका में देखें :) .. और कोड का उपयोग करके किया गया, आईबी नहीं।

मुझे लगता है कि मुझे टेबल व्यू के पृष्ठभूमि रंग को साफ़ करना होगा, फिर उन्हें कॉन्फ़िगर करते समय सेल रंग सेट करें ताकि वे पारदर्शी न हो जाएं। और फिर किसी भी तरह से तालिका के नीचे एक पृष्ठभूमि छवि "चुपके" तालिका के अंदर से देखें दृश्य देखें उदाहरण?

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

उम्मीद है कि कोई मेरी मदद कर सकता है, मैं सब 'googled out' :) धन्यवाद!

उत्तर

9

आपको UIViewController के रूप में अपने नियंत्रक को सेट करने की आवश्यकता है, UITableViewController नहीं। फिर पृष्ठभूमि imageView के ऊपर tableview प्रोग्रामेटिक रूप से जोड़ें।

@interface SomeController : UIViewController <UITableViewDataSource, UITableViewDelegate> { 
    ... 
    UITableView *tableView; 
    ... 
} 
@property (nonatomic, retain) UITableView *tableView; 
@end 



@implementation SomeController 

@synthesize tableView; 

... 

- (void)loadView { 
    [super loadView]; 
    UIImageView *v = [[[UIImageView alloc] initWithFrame:self.view.bounds] autorelease]; 
    [v setImage:[UIImage imageNamed:@"table_background.png"]]; 
    [self.view addSubview:v]; 


    self.tableView = [[[UITableView alloc] initWithFrame:self.view.bounds] autorelease]; 
    [self.tableView setBackgroundColor:[UIColor clearColor]]; 
    [self.view addSubview:self.tableView]; 
} 
... 
@end 
+0

धन्यवाद Coneybeare, इस तर्क है कि मैं महत्वपूर्ण व्यक्ति है कि एक कस्टम छवि को शामिल में देखा है का पालन करें सामान्य दृश्य का निर्माण, एक imageView और इसके अंदर एक tableView डाल करने के लिए लगता है। मुझे कुछ अजीब व्यवहार मिलता है:/ मैंने सेलफॉररोएट इंडेक्सपैथ लागू किया: और इसमें "टेबलव्यू" नामक एक स्थानीय चर भी है। यह कंपाइलर चेतावनी का कारण बनता है "तालिका दृश्य 'की स्थानीय घोषणा' छुपा उदाहरण परिवर्तनीय"। मैंने फिर वैरिएबल को tableViewLocal में बदलने का प्रयास किया लेकिन चेतावनी बनी हुई है। -continue ... – RickiG

+2

साथ ही जब दृश्य को लोड करना (जैसा कि मेरे प्रश्न में वर्णित है) यह क्रैश हो जाता है जब मैं [self.tableView addSubview: self.tableView] जोड़ता हूं; यह नहीं होना चाहिए: [self.view addSubview: self.tableView]; यह संकलित करता है और काम करता है, लेकिन केवल पृष्ठभूमि छवि है, कोई टेबल नहीं है? मुझे लगता है कि दृष्टिकोण अच्छा है, लेकिन कुछ आईएम गायब है :) फिर से थान :) – RickiG

+0

मैं विधि हस्ताक्षर में सभी "tableView" तर्कों को बदल सकता हूं ताकि वेTableView हो सकें, और self.tableView को छोड़ दें। दुर्घटना मेरे हिस्से पर एक टाइपो थी, यह स्वयं होना चाहिए था ... देखें (होना चाहिए) – coneybeare

0

धन्यवाद कॉनीबीयर।

यह अब और क्रैश नहीं होता है और पृष्ठभूमि छवि बिल्कुल सही हो जाती है (शीर्ष पर मेरे नेविगेशन नियंत्रक के साथ) हालांकि, अभी भी कोई दृश्य तालिका नहीं है?बस पृष्ठभूमि छवि और navigationControllerBar:

- (void)loadView { 
[super loadView]; 

UIImageView *imageView = [[[UIImageView alloc] initWithFrame:self.view.bounds] autorelease]; 
[imageView setImage:[UIImage imageNamed:@"carbon_background.png"]]; 
[self.view addSubview:imageView]; 

[self.tableView = [[UIView alloc] initWithFrame:self.view.bounds] autorelease]; 

[self.tableView setBackgroundColor:[UIColor clearColor]]; 
[self.view addSubview:self.tableView]; 

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView { 
return 1; 

}

- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section { 
return 3; 

}

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
} 
cell.textLabel.text = @"Hello, World"; 

return cell; 
:

यह मेरा कार्यान्वयन है

}

// प्रतिबद्ध संपादित करें, didSelectRow, स्मृति ... आदि

मंच एक ही बार में एक पूरी मीटर फ़ाइल के लिए नहीं था। कृपया मुझे बताएं कि क्या मैंने कुछ छोड़ दिया है जो त्रुटि को इंगित करने में मदद कर सकता है।

मैं शायद सोचा था कि यह परतों का क्रम था और किसी भी भाग्य के बिना इस की कोशिश की:

[self.view sendSubviewToBack:imageView]; 

आशा मैं कुछ स्पष्ट याद किया।

अपने समय के लिए धन्यवाद :)

+0

बस इसे मिला :) self.tableView = [[[UIView alloc] initWithFrame: self.view.bounds] autorelease]; होने की आवश्यकता है: self.tableView = [[[UITableView alloc] initWithFrame: self.view.bounds] autorelease]; अन्यथा यह "फिट" नहीं होगा :) फिर से धन्यवाद! – RickiG

2

ठीक है, अब यह चल रहा है :) मेरे tableView मेरी कोशिकाओं के साथ तैयार नहीं हुआ था, इसलिए बात मैं पता चला है कि भले ही मैं TableViewDataSource और लागू किया के माध्यम से breakPointing TableViewDelegate, यह केवल मुख्य दृश्य में था, मुझे टेबलव्यू के प्रतिनिधि और डेटासोर्स को = स्वयं को सेट करने की आवश्यकता थी।

- (void)loadView { 
[super loadView]; 

UIImageView *imageView = [[[UIImageView alloc] initWithFrame:self.view.bounds] autorelease]; 
[imageView setImage:[UIImage imageNamed:@"carbon_background.png"]]; 
[self.view addSubview:imageView]; 

[self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds] autorelease]; 
[self.tableView setBackgroundColor:[UIColor clearColor]]; 
[self.view addSubview:self.tableView]; 

self.tableView.delegate = self; 
self.tableView.dataSource = self; 

}

0

कुछ युक्तियां::

:

  • तो एक UISplitViewController का उपयोग कर इस यहाँ करने के लिए कोई ऐसा उत्तर दूसरों के लिए विधि के रूप में यह Coneybeares मदद से समाप्त हो गया है

    splitViewController.view.backgroundColor = [UIColor scrollViewTexturedBackgroundColor]; 
    
  • यदिका उपयोग करना है 10:

    navigationController.view.backgroundColor = [UIColor scrollViewTexturedBackgroundColor]; 
    
  • यदि दोनों एक UISplitViewController और एक UINavigationController का उपयोग कर:

    navigationController.view.backgroundColor = [UIColor clearColor]; 
    splitViewController.view.backgroundColor = [UIColor scrollViewTexturedBackgroundColor]; 
    

किसी भी UIView आपको लगता है कि के माध्यम से देखना चाहता हूँ की पृष्ठभूमि का रंग सेट करने के लिए सुनिश्चित करें के शीर्ष पर है UINavigationController या UISplitViewController से [UIColor clearColor]

6

यदि आप लक्ष्यीकरण कर रहे हैं तो होप्स के माध्यम से यह सब अनावश्यक है> आईओएस 3.2, जहां आप UIImageView को सीधे सेट करने के लिए नई backgroundView संपत्ति का उपयोग कर सकते हैं, उदा।:

// In your UITableViewController subclass 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIImageView *view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]]; 
    self.tableView.backgroundView = view; 
} 
संबंधित मुद्दे