У меня есть всплывающее представление, которое я реализовал в виде полноразмерного прозрачного представления с уменьшенным 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 для заголовка, нижнего колонтитула и ячейки.
Это лучший подход к функциональности, которую я пытаюсь достичь?
Спасибо!