在UITableView中自动更新背景

时间:2013-02-08 03:46:22

标签: ios objective-c uitableview

我正在制作iOS应用程序,它基于UITableView。我设置背景,以便在没有TableViewCell时,背景是自定义背景。当有TableViewCells时,应用程序会将背景更改为颜色。问题是,应用程序必须强制退出并重新启动才能更改背景。无论如何我能做到这一点,以便自动更新背景?这是我的代码:

// Check if table view has any cells
int sections = [self.tableView numberOfSections];
BOOL hasRows = NO;
for (int i = 0; i < sections; i++)
    hasRows = ([self.tableView numberOfRowsInSection:i] > 0) ? YES : NO;

if (sections == 0 || hasRows == NO)
{
    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background-app.png"]];

}
else
{
 self.tableView.backgroundColor = [UIColor whiteColor];
    self.tableView.backgroundView = nil;
}

我把它放在我的viewDidLoad

4 个答案:

答案 0 :(得分:1)

self.viewself.tableView是同一个视图对象吗?

您将图片设置为self.tableView的背景和self.view背景上的颜色。如果表格视图是self.view的子视图,则在设置背景图片后,它将始终模糊self.view的背景颜色。

强制退出可能有效,因为您重新运行逻辑并且从不首先设置图像背景。尝试将表格视图的背景视图设置为nil

if (sections == 0 || hasRows == NO)
{
    UIImage *image = [UIImage imageNamed:@"background-app.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

    // Set the background view of the table view
    self.tableView.backgroundView = imageView;
}
else
{
    [[self view] setBackgroundColor:[UIColor whiteColor]];   
    self.tableView.backgroundView = nil;
}

答案 1 :(得分:1)

我明白了!基本上,我将以下代码放在viewDidLoad

// Check if table view has any cells
int sections = [self.tableView numberOfSections];
BOOL hasRows = NO;
for (int i = 0; i < sections; i++)
    hasRows = ([self.tableView numberOfRowsInSection:i] > 0) ? YES : NO;

if (sections == 0 || hasRows == NO)
{

    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background-app.png"]];
}
else
{
    self.tableView.backgroundColor = [UIColor whiteColor];
    self.tableView.backgroundView = nil;
}

我必须做的是将此代码放在我的viewDidLoad

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

并将代码放在上面的controllerDidChangeContent中,如下所示

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView endUpdates];

    // Check if table view has any cells
    int sections = [self.tableView numberOfSections];
    BOOL hasRows = NO;
    for (int i = 0; i < sections; i++)
        hasRows = ([self.tableView numberOfRowsInSection:i] > 0) ? YES : NO;

    if (sections == 0 || hasRows == NO)
    {

        self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background-app.png"]];
    }
    else
    {
        self.tableView.backgroundColor = [UIColor whiteColor];
        self.tableView.backgroundView = nil;
    }
}

因此当应用程序启动时,它会加载背景图片“background-app.png”。然后,只要它识别出应用程序中有数据,它就会自动更改为正常的白色背景。然后,当您删除所有数据时,它会返回到背景图片“background-app.png”。

答案 2 :(得分:0)

在两者中使用self.tableView.backgroundColor,可能有助于解决您的问题

if (sections == 0 || hasRows == NO)
{
    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"YourImage.png"]];

}
else
{
    [[self view] setBackgroundColor:[UIColor whiteColor]];   
    self.tableView.backgroundView = nil;
}

答案 3 :(得分:0)

如果您使用,请使用此

    if (sections == 0 || hasRows == NO)
{
    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"YourImage.png"]];

}
else
{
   self.tableView.backgroundColor = [UIColor whiteColor];   
    self.tableView.backgroundView = nil;
}