Загружать UIViews из xibs в верхние и нижние колонтитулы и ячейки UITableView? - PullRequest
0 голосов
/ 10 октября 2011

У меня есть всплывающее представление, которое я реализовал в виде полноразмерного прозрачного представления с уменьшенным UITableView поверх этого.То, что я хочу сделать, это дизайн-представления внутри XIB-файлов, а затем загрузить их в разделы UITableView, такие как верхний и нижний колонтитулы и ячейки.И я хочу, чтобы все это было как можно более сдержанным, используя только 1 контроллер представления и несколько XIB.

Я могу легко сделать верхний и нижний колонтитулы внутри одного контроллера представления.Я сделал xib заголовка и внутри IB связал различные компоненты с IBOutlets в моем контроллере с одним представлением.Затем в контроллере представления, в котором я реализую соответствующие делегаты UITableView, в viewForHeaderInSection я загружаю xib, используя:

UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];

if (section == 0)
{
    [headerView setBackgroundColor:[UIColor colorWithRed:0.000 green:0.002 blue:0.334 alpha:0.850]];

    NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"TableHeader" owner:self options:nil];
    UIView *nibView = [nibObjects objectAtIndex:0];

    headerView.autoresizesSubviews = YES;
    [headerView addSubview:nibView];

    [headerLabel1 setText:@"blah"];
    [headerLabel2 setText:@"blah"];
    [headerLabel3 setText:@"blah"];
    [headerLabel4 setText:@"blah"];
}
else 
{
    [headerView setBackgroundColor:[UIColor clearColor]];
}

return headerView;

Хотя я не могу заставить эту же вещь работать для ячеек.Я попробовал тот же процесс, захватывая xib из nibObjects и добавляя представление к представлению ячейки, но это не работает.Я заставил его работать, создав класс контроллера представления с xib для ячеек, затем внутри контроллера представления, который содержит мой UITableView внутри метода viewDidLoad, я создаю 2 экземпляра этого VC:

 cell1 = [[CellViewController alloc] initWithNibName:@"CellViewController" bundle:nil weatherData:weatherItems];

[cell1 setTitle:@"1"];

cell2 = [[CellViewController alloc] initWithNibName:@"CellViewController" bundle:nil weatherData:weatherItems];

[cell2 setTitle:@"2"];

Затем внутри cellForRowAtIndexPathЯ добавляю представления cell1 и cell2 к представлению текущей ячейки.Вот код:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];

if (cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];

    if(indexPath.row == 0)
        [cell addSubview:cell1.view];
    else
        [cell addSubview:cell2.view];

    cell.userInteractionEnabled = NO;
}

return cell;

Затем я занимаюсь настройкой компонентов IBOutlet внутри контроллера представления ячейки, используя self.title (который был установлен обратно в контроллере представления, который содержит UITableView.

Этоподход работает, но я хотел бы иметь только 1 класс VC и отдельные xib для заголовка, нижнего колонтитула и 1 xib для ячейки, которые можно использовать снова и снова, просто нужно иметь возможность устанавливать компоненты ячейки по-разному в зависимости от строки.

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

Кроме того, существует способ создания нескольких UIViews.внутри 1 xib и использовать их отдельно? То есть у меня может быть только одна xib вместо 3 для заголовка, нижнего колонтитула и ячейки.

Это лучший подход к функциональности, которую я пытаюсь достичь?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...