2009-05-22 14 views
50

क्या UITableViewController पर पृष्ठभूमि दृश्य सेट करने का कोई तरीका है?आईफोन - UITableViewController पर पृष्ठभूमि सेट करना

मैं उस कोड के साथ प्रयास करता हूं जिसका उपयोग मैं UIViewController पर कर रहा हूं, लेकिन दृश्य तालिका दृश्य की सभी सामग्री पर आता है। अगर मैं cellForRowAtIndexPath-method में पृष्ठभूमि दृश्य जोड़ता हूं, तो यह बिल्कुल दिखाई नहीं दे रहा है। क्या किसी ने पहले यह किया है या यह विचार किया है कि यह कैसे किया जा सकता है? यहाँ कोड मैं का उपयोग कर रहा है:

UIImage *image = [UIImage imageNamed: @"background.jpg"]; 
UIImageView *backImage = [[UIImageView alloc] initWithImage: image]; 
[self.view addSubview: backImage]; 
[self.view sendSubviewToBack: backImage]; 

उत्तर

68

(यह मूलतः ऊपर हंस एस्पेन के समाधान के रूप में ही है, लेकिन संक्षिप्तता के लिए सुविधा तरीकों का उपयोग करता)

अपने में इस रखो - [UITableViewControllerSubclass viewDidLoad] विधि:

self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BackgroundPattern.png"]]; 

कोई बात है एक दृश्यडिडलोड विधि में कुछ ऑटोरेलीज़ से बचने में, क्योंकि इसे केवल शायद ही कभी कहा जाता है (जब दृश्य वास्तव में लोड होता है) और इसलिए प्रदर्शन पर नगण्य प्रभाव पड़ता है।

एनबी। आपको हमेशा आईफोन पर पीएनजी छवियों का उपयोग करना चाहिए, जेपीईजी या किसी अन्य प्रारूप में नहीं।

+0

आईओएस के लिए केवल .png क्यों? –

+13

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

+2

यह तालिका प्रत्येक समूह की पृष्ठभूमि सेट करता है जब तालिका समूहबद्ध शैली पर सेट की जाती है, क्या इसे हल करने का कोई तरीका है? –

6

वास्तव में, मैं यह काम कर रहा हो गया! :)

NSString *backgroundPath = [[NSBundle mainBundle] pathForResource:@"background" ofType:@"jpg"]; 
UIImage *backgroundImage = [UIImage imageWithContentsOfFile:backgroundPath]; 
UIColor *backgroundColor = [[UIColor alloc] initWithPatternImage:backgroundImage]; 
self.tableView.backgroundColor = backgroundColor; 
[backgroundColor release]; 
0
self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImage.png"]]; 
72

मैं जानता हूँ कि यह एक लंबा समय हो गया है, लेकिन सिर्फ रिकार्ड के लिए .. आई थिंक आई एक बेहतर समाधान UITableView.backgroundView का उपयोग कर पाया:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"lisbon.png"]]; 

self.tableView.backgroundView = imageView; 
[imageView release]; 

मैं iPhone पर 320x480 की एक छवि आकार के साथ करने की कोशिश की , और सही काम करता है (मैंने भी .jpg के साथ प्रयास किया है)।

+1

यह बहुत अच्छा काम किया !! – Das

+1

यह बेहतर है, हेडर के पीछे भी – powerj1984

+0

सहमत है, इस पैटर्न का उपयोग रंग पैटर्न का उपयोग करके किया गया है। –

5

स्विफ्ट उपयोग इस के लिए,

self.tableView.backgroundView = UIImageView(image: UIImage(named: "backgroundImage.png")) 
+0

यह समाधान मेरे लिए काम कर रहा है, लेकिन मुझे पता चला है कि अपारदर्शी, bgcolor के गुण ... xcode 8 में पुराने बिल्ड (उदाहरण के लिए आईओएस 9) के लिए स्वीकार नहीं किए जाते हैं। मुझे नहीं पता, अगर मुझे कुछ याद आया, लेकिन मैंने कोडव्यूलेट को कोड में आउटलेट के रूप में संदर्भित किया, और उन्हें अपारदर्शी और पृष्ठभूमि दृश्य शून्य बना दिया। शायद यह किसी और की मदद करेगा :) –

0

वर्गों के साथ एक स्थिर UITableViewController के लिए सी # में आप उपयोग कर सकते हैं:

using System; 
using Foundation; 
using UIKit; 
using CoreGraphics; 
using CoreAnimation; 

namespace MyNamespace 
{ 
    public class CustomTableViewController : UITableViewController 
    { 
     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 

      SetGradientBackgound(); 
     } 

     private void SetGradientBackgound() 
     { 
      CGColor[] colors = new CGColor[] { 
       UIColor.Purple.CGColor, 
       UIColor.Red.CGColor, 
      }; 

      CAGradientLayer gradientLayer = new CAGradientLayer(); 
      gradientLayer.Frame = this.View.Bounds; 
      gradientLayer.Colors = colors; 
      gradientLayer.StartPoint = new CGPoint(0.0, 0.0); 
      gradientLayer.EndPoint = new CGPoint(1.0, 1.0); 

      UIView bgView = new UIView() 
      { 
       Frame = this.View.Frame 
      }; 
      bgView.Layer.InsertSublayer(gradientLayer, 0); 

      UITableView view = (UITableView)this.View; 
      view.BackgroundColor = UIColor.Clear; 
      view.BackgroundView = bgView; 
     } 

     // Setting cells background transparent 
     public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
     { 
      var cell = base.GetCell(tableView, indexPath); 
      cell.BackgroundColor = UIColor.Clear; 
      return cell; 
     } 

     // Setting sections background transparent 
     public override void WillDisplayHeaderView(UITableView tableView, UIView headerView, nint section) 
     { 
      if (headerView.GetType() == typeof(UITableViewHeaderFooterView)) 
      { 
       UITableViewHeaderFooterView hView = (UITableViewHeaderFooterView)headerView; 
       hView.ContentView.BackgroundColor = UIColor.Clear; 
       hView.BackgroundView.BackgroundColor = UIColor.Clear; 
      } 
     } 

    } 
} 

परिणाम कुछ इस तरह हो सकता है:

Setting TableViewController grading background

संबंधित मुद्दे