web-dev-qa-db-ja.com

iPhone-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];
50
Hans Espen

(これは基本的に上記のHans Espenのソリューションと同じですが、簡潔にするために便利な方法を使用しています)

これをあなたの-[UITableViewControllerSubclass viewDidLoad] 方法:

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

ViewDidLoadメソッドでは、まれにしか呼び出されないため(ビューが実際にロードされるとき)、パフォーマンスへの影響は無視できるため、viewDidLoadメソッドでの自動リリースを回避する意味はありません。

N.B. iPhoneでは、JPEGやその他の形式ではなく、常にPNG画像を使用する必要があります。

68
Nick Forge

私はそれが長い時間だったことを知っていますが、記録のためだけに.. UITableView.backgroundView

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

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

IPhoneで320x480の画像サイズで試しましたが、完璧に動作します(.jpgでも試しました)。

72
Frade

実際に、私はそれを機能させました! :)

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];
6
Hans Espen

Swiftを使用する場合、

self.tableView.backgroundView = UIImageView(image: UIImage(named: "backgroundImage.png"))
5
Zaid Pathan

C#で、使用可能なセクションを含む静的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

0
gts
self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"yourImage.png"]];
0