我正在制作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
中答案 0 :(得分:1)
self.view
和self.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;
}