Вопрос по iphone, uitableview, background-image – iPhone UITableView PlainStyle с пользовательским фоновым изображением - сделано «полностью» в коде

7

Я был повсюду, кажетсяUITableView со статическим фоном проблема хорошо документирована, но ни у кого нет прямого решения? Я строю свойTableViews полностью в коде, вот так:

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

Окно мое главноеUIWindow построить для меня в приложении делегата. С этого момента мне нужно построить несколько разныхTableViews (контролируетсяnavigationController), некоторые сfetchedResultsControllersпользовательские ячейки и тд. Я предпочитаю делать это полностью в коде, не используя нибТак как это может привести к разбросу настроек между кодом и IB или к необходимости создавать и поддерживать более 6 разных Nib.

Я просто могунайти рабочий пример, гдеtableViewController Класс устанавливает этоs собственное фоновое изображение. Если я сделаю это внутри одного из моихTableViews (расширениеUITableViewController):

self.tableView.backgroundColor = backgroundColor;

Я, конечно, получаю tableView 's окрашенный фон (который случайно окрашивает ячейкуну, думаю, клеткаs наследует свой цвет отtableView?) но я хочу иметь статическое фоновое изображение, над которым мои ячейки скользят вверх и вниз. Не "изображение на заднем плане" это скользит вверх и вниз с жестами пользователей. Именно то, что предлагает табличное представление GroupedStyle, но в табличном представлении PlainStyle :) .. и сделано с использованием кода, а не IB.

Я думаю, мне нужно очистить цвет фона таблицы, а затем установить цвет ячеек при их настройке, чтобы они неполучается прозрачным. А то как токрасться» фоновое изображение ниже представления tableView из экземпляра tableView?

Как мне поступить, лучшим решением было бы сделать это в viewDidLoad или любой другой функции внутри моего TableViewController, чтобы хранить все мои настройки в одном месте.

Надеюсь, кто-нибудь может мне помочь, я всепогуглил :) Спасибо!

Ваш Ответ

5   ответов
0

Это небольше не падает, и фоновое изображение получается просто идеальным (вместе с моим верхним навигационным контроллером). Тем не менее, все еще нет видимого tableView? только фоновое изображение и панель навигации Controller:

Это моя реализация:}}}}

- (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, память… и т.п.

Форум не былt для всего файла .m за один раз. Пожалуйста, скажите мне, если я пропустил что-то, что может помочь указать на ошибку.

Я подумал, может быть, это был порядок слоев и попробовал это без какой-либо удачи:

    [self.view sendSubviewToBack:imageView];

Надеюсь, я пропустил что-то очевидное.

Спасибо за ваше время:)

Только что получил :) self.tableView = [[[UIView alloc] initWithFrame: self.view.bounds] autorelease]; должно быть: self.tableView = [[[UITableView alloc] initWithFrame: self.view.bounds] autorelease]; Иначе не будетпоместиться" :) Еще раз спасибо! RickiG
0

При использовании:UISplitViewController

splitViewController.view.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];

При использовании:UINavigationController

navigationController.view.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];

Если использовать обаUISplitViewController и:UINavigationController

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

Обязательно установите цвет фона любогоUIView Вы хотите видеть сквозь это на вершинеUINavigationController или жеUISplitViewController к[UIColor clearColor]

2

) Мой tableView не был заполнен моими ячейками, так что breakPointing через то, что я обнаружил, что хотя я реализовал TableViewDataSource и TableViewDelegate, это было только в главном представлении, мне нужно было установить делегат и источник данных представления таблицы to = self. Для тех, кто ищет ответ на этот вопрос, вот метод, который в итоге помог Coneybeares:}

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

6

 iOS 3.2, где вы можете использовать новыйbackgroundView свойство для прямой установки UIImageView, например:

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

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

Вы должны настроить свой контроллер какUIViewControllerнеUITableViewController, Затем добавьтеtableview программно над фоном.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
</uitableviewdatasource,>
Благодаря Coneybeare, это, кажется, соответствует логике, которую я видел в Nibs, которые включают в себя пользовательское изображение, строят общий вид, помещают в него изображение и просмотр таблицы. Я получаю странное поведение: / Я реализовал cellForRowAtIndexPath: и у него есть локальная переменная с именем "Tableview» также. Это вызывает предупреждение компилятораместная декларацияTableview» скрывает переменную экземпляра, Затем я попытался переименовать переменную в tableViewLocal, но предупреждение не исчезло. -Продолжить... RickiG
Также при загрузке представления (как описано в моем вопросе) происходит сбой при добавлении [self.tableView addSubview: self.tableView]; Isn»Это должно быть: [self.view addSubview: self.tableView]; это компилируется и работает, но есть только фоновое изображение, нет таблиц? Я думаю, что подход здравый, но есть кое-что, что я пропускаю :) Снова спасибо :) RickiG
Я бы поменял всеTableview» аргументы в сигнатурах метода должны быть theTableView и оставить self.tableView таким, какой он есть. Крушение было опечаткой с моей стороны, это должно было быть добавление self.view…  (исправлено сейчас) coneybeare
self.tableView = [UIView alloc] должен быть self.tableView = [UITableView alloc]. Для меня этого было достаточно, чтобы исправить аварию. pm_labs

Похожие вопросы