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

私はそれを考え出した!基本的に、私は次のコードを my に入れました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 に答える
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;
}
于 2013-02-08T03:53:13.190 に答える
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 に答える
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 に答える