iPhone UITableView PlainStyle mit Bild benutzerdefinierten Hintergrund - fertig „vollständig“ in Code

StackOverflow https://stackoverflow.com/questions/1637738

Frage

Ich habe alle über den Platz gewesen, scheint die UITableView mit einem statischen Hintergrund Problem ist gut dokumentiert, aber niemand mit einer straight forward Lösung? Im Aufbau meine TableViews vollständig in Code wie folgt:

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

Das Fenster ist mein Haupt UIWindow für mich bauen in der App delegieren. Von hier an Mich brauche ein paar verschiedenen TableViews (gesteuert durch die navigationController), einige mit fetchedResultsControllers, individuellen Zellen und so weiter zu bauen. Ich ziehe diese vollständig in Code zu tun, nicht Spitze der Verwendung, da dies entweder mit Anpassung Spread zwischen Code führen würde und IB oder mit aufzubauen und zu pflegen 6+ verschiedenen Nibs.

Ich kann einfach nicht ein funktionierendes Beispiel, wo ein tableViewController Klasse seinen eigenen Hintergrundbild festlegt. Wenn ich dies innerhalb einer meiner TableViews (Erweiterung UITableViewController):

self.tableView.backgroundColor = backgroundColor;

ich, natürlich, den Hintergrund des Tableview erhalten farbig (die übrigens Farben als auch die Zelle, denken die Zelle erbt ihre Farbe von der tableView?), Aber ich möchte ein statisches Hintergrundbild haben, die meine Zellen nach oben und unten auf oben auf. Nicht ein „Hintergrundbild“, die nach oben und unten mit den Benutzern Gesten gleiten. Genau das, was die GroupedStyle Tableview bietet, aber in einem PlainStyle Tableview :) .. und mit dem Code getan, nicht IB.

Ich glaube, ich habe die Hintergrundfarbe der Tabellenansicht zu löschen, stellen Sie dann die Zellen Farbe, wenn sie die Konfiguration, so dass sie transparent nicht ausfallen. Und dann irgendwie „schleicht“ ein Hintergrundbild unter der Tableview-Ansicht aus dem Innern der Tableview Instanz?

Wie werde ich über diese gehen, die beste Lösung wäre in der Lage sein, dies zu tun in viewDidLoad oder jede anderen Funktion in meinem Tableviewcontroller, alles an einem Ort meiner Anpassung zu halten.

Hoffe jemand kann mir helfen, ich bin all 'gegoogelt out' :) Danke!

War es hilfreich?

Lösung

Sie benötigen eine Steuerung als UIViewController einzurichten, kein UITableViewController. Dann fügen Sie die tableview programmatisch über einem Hintergrund imageView.

@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

Andere Tipps

Alle diese Springen durch Reifen ist nicht erforderlich, wenn Sie Targeting> iOS 3.2, in dem Sie das neue backgroundView Eigenschaft eine UIImageView direkt zu setzen, zum Beispiel:

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

    UIImageView *view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
    self.tableView.backgroundView = view;
}  

Ok, jetzt ist es läuft :) Meine Tableview war nicht mit meinen Zellen besiedelt, so durch das Setzen von Breakpoints, was ich herausgefunden habe dass, obwohl ich die TableViewDataSource und TableViewDelegate umgesetzt hatte, war dies nur in der Hauptansicht, musste ich die Delegaten und Datenquelle des Tableview zu = selbst setzen. Für andere eine Antwort auf diese hier suchen, ist das Verfahren, wie es mit Hilfe Coneybeares endete:

- (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;

}

Danke Coneybeare.

Es stürzt nicht mehr und das Hintergrundbild taucht einfach perfekt (zusammen mit meiner Navigation in der Spitze) Jedoch noch nicht sichtbar Tableview? nur das Hintergrundbild und die navigationControllerBar:

Dies ist meine Implementierung:

- (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;

}

// begehen bearbeiten, didSelectRow, Gedächtnis ... etc.

Das Forum entspricht nicht für eine ganze .m-Datei in einem Rutsch. Bitte sagen Sie mir, wenn ich etwas aus, dass links könnte einen Fehler helfen angeben.

Ich dachte, vielleicht war es die Reihenfolge der Schichten und versuchte, dies ohne Erfolg:

    [self.view sendSubviewToBack:imageView];

Hoffe, dass ich etwas verpasst offensichtlich.

Vielen Dank für Ihre Zeit:)

Einige Tipps:

  • Bei Verwendung eines UISplitViewController:

    splitViewController.view.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
    
  • Bei Verwendung eines UINavigationController:

    navigationController.view.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
    
  • Bei der Verwendung von sowohl ein UISplitViewController und UINavigationController:

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

Seien Sie sicher, dass die Hintergrundfarbe jeder UIView Sie durch das sehen wollen setzen, ist auf der Oberseite des UINavigationController oder UISplitViewController [UIColor clearColor].

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top