Как я могу использовать пользовательские UITableViewCell и UITableView в одном и том же xib
Я хочу использовать пользовательский UITableviewCell с UITableView в том же xib, не создавая класс UITableViewCell?
Как вы можете видеть ниже, я устанавливаю идентификатор для UITableViewCell и использую его следующим образом:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CustomIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
}
Но не работает?
Ответы
Ответ 1
Добавить свойство UITableViewCell * customCell в ваш контроллер представления (например, ваш файл ShowUsers.h)...
@property (nonatomic, strong) IBOutlet UITableViewCell *customCell;
и подключите его к пользовательской ячейке вашего xib. Затем используйте следующий код в cellForRow (например, ваш файл ShowUsers.m):
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"NibName" owner:self options:nil];
cell = self.customCell;
self.customCell = nil;
}
Ответ 2
Да, вы можете сделать следующий код
В представлении ViewDidLoad или ViewWillAppear
label1Array=[NSMutableArray arrayWithObjects:@"A",@"B",nil];
label2Array=[NSMutableArray arrayWithObjects:@"C",@"D",nil];
label3Array=[NSMutableArray arrayWithObjects:@"E",@"F",nil];
UITableViewDelegate
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"aCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
UILabel *label1=[[UILabel alloc]init];
label1.frame=CGRectMake(0,0,40,40);
label1.text=[label1Array objectAtIndex:indexPath.row];
................
[cell.contentView addSubView: label1];
UILabel *label2=[[UILabel alloc]init];
label2.frame=CGRectMake(50,0,40,40);
label2.text=[label2Array objectAtIndex:indexPath.row];
[cell.contentView addSubView: label2];
UILabel *label3=[[UILabel alloc]init];
label3.frame=CGRectMake(100,0,40,40);
label3.text=[label3Array objectAtIndex:indexPath.row];
[cell.contentView addSubView: label3];
}
Надеюсь, что это поможет!!!
Ответ 3
Смотрите. Вы можете так поступить. Здесь вы добавляете два UITableViewCell в один TableView с помощью XIB.
В файле Class.h: -
Объявить один изменяемый массив для числа ячеек.
{
NSMutableArray * sectionRows;
}
@property (nonatomic,retain) IBOutlet UITableViewCell *addTvc1;
@property (nonatomic,retain) IBOutlet UITableViewCell *addTvc2;
В Class.m: -
@synthesize addTvc1, addTvc2;
- (void)viewDidLoad
{
[super viewDidLoad];
sectionRows = [[NSMutableArray alloc] init];
[sectionRows addObject:[[NSMutableArray alloc]
initWithObjects:addTvc1, nil]];
[sectionRows addObject:[[NSMutableArray alloc]
initWithObjects:addTvc2, nil]];
}
В UITableViewDelegate Method -
Добавить это -
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [sectionRows count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
(NSInteger)section
{
return [[sectionRows objectAtIndex:section] count];
}
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath
{
return [[sectionRows objectAtIndex:indexPath.section]
objectAtIndex:indexPath.row];
}
Наряду с кодом в классе XIB удаляются и перетаскиваются два UITableViewCell, которые должны быть снаружи из представления и добавлять эти ячейки с помощью Owner Owner.
Он будет работать отлично. Здесь нет необходимости создавать один отдельный пользовательский класс UITableViewCell.