1

我正在制作一个 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

4 回答 4

1

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

您正在将图像设置为的背景self.tableView和背景的颜色self.view。如果 table 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;
}
于 2013-02-08T03:53:13.190 回答
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”。

于 2013-02-10T08:06:51.927 回答
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;
}
于 2013-02-08T04:31:39.340 回答
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;
}
于 2013-02-08T07:45:41.340 回答