Как добавить определенную ячейку таблицы в таблицу?

Я просмотрел stackoverflow, и есть некоторые вопросы, которые, кажется, расчесывают стороны этого, но никто на самом деле не отвечает на него.

Самое близкое, что я нашел, это вопрос здесь, но это не то, что я хочу.

У меня есть tableview, который заполнен клетками tableview (позволяет называть их ячейками A). Когда я нажимаю одну из этих ячеек, я хочу вставить в нее другую пользовательскую ячейку таблицы (B-ячейки).

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

Это то, с чем я сейчас работаю:

-(id) initWithGuestNumber: (NSInteger *) numberOfPeople {
 self = [super initWithNibName:Nil bundle:Nil];
 if (self) {

 numberOfGuests = * numberOfPeople;
 guestArray = [NSMutableArray new];

 for (NSInteger i = 1; i <= numberOfGuests; i++) {

 BGuest * guest = [BGuest alloc];
 NSMutableArray * array = [NSMutableArray new];

 // Set up guest object
 guest.name = [NSString stringWithFormat:@"Person %li", (long)i];
 guest.mealArray = array;
 guest.priceArray = array;
 guest.cost = 0;

 [guestArray addObject:guest];
 }
 }
 return self;
}

- (void)viewDidLoad
{
 [super viewDidLoad];

 // Set up custom tableview cells
 [self.tableView registerNib:[UINib nibWithNibName:@"BHeaderCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"HeaderCell"];
 [self.tableView registerNib:[UINib nibWithNibName:@"BContentCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"ContentCell"];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView_
{
 // Want a section for each guest
 return guestArray.count;
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 BGuest * guest = guestArray[section];
 // Want a row in the section for each meal added to each guest - by clicking the row
 return guest.mealArray.count + 1;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 BHeaderCell * headerCell = [tableView dequeueReusableCellWithIdentifier:@"HeaderCell"];
 BContentCell * contentCell = [tableView dequeueReusableCellWithIdentifier:@"ContentCell"];

 // Setting the delegate programatically to set the textfield


 BGuest * guest = guestArray[indexPath.section];

 if (indexPath.row == 0) {

 headerCell.guestNameTextField.delegate = headerCell;
 headerCell.guestNameTextField.placeholder = guest.name;
 headerCell.guestMealPriceLabel.text = [NSString stringWithFormat:@"£%.2f", guest.cost];
}
 else {

 contentCell.mealNameTextField.delegate = contentCell;
 contentCell.mealCostTextField.delegate = contentCell;

 contentCell.mealNameTextField.text = @"Meal Name";
 contentCell.mealCostTextField.text = @"Meal Cost";
 }

 return headerCell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 BGuest * guest = guestArray[indexPath.section];

 NSString * first = @"first";
 [guest.mealArray addObject:first];

 [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationFade];

 [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

Таким образом, в настоящее время, когда я нажимаю на строку, добавляется новая строка, но это та же пользовательская ячейка, что и щелкнутая строка (нажатие на ячейку A добавляет другую ячейку A под ней).

То, что я хочу, - это вставить новую пользовательскую ячейку внизу, когда щелкнет строка (щелкните ячейку A, а ячейку B вставлен снизу).

Есть ли способ сделать это с помощью метода insertrowatindexpath или есть лучший/другой способ?

Спасибо и помогите вам, ребята/девушки могут дать

1 ответ

Как только я нажал на вопрос по почте, он внезапно выскочил передо мной.

В настоящее время в моем коде я всегда возвращал headerCell (A cell)

Я немного включил код в cellForRowAtIndex и начал работать:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

 // Setting the delegate programatically to set the textfield


 BGuest * guest = guestArray[indexPath.section];

 if (indexPath.row == 0) {

 BHeaderCell * headerCell = [tableView dequeueReusableCellWithIdentifier:@"HeaderCell"];

 headerCell.guestNameTextField.delegate = headerCell;

 headerCell.guestNameTextField.placeholder = guest.name;

 headerCell.guestMealPriceLabel.text = [NSString stringWithFormat:@"£%.2f", guest.cost];

 return headerCell;
 }
 else {

 BContentCell * contentCell = [tableView dequeueReusableCellWithIdentifier:@"ContentCell"];

 //contentCell.mealNameTextField.delegate = contentCell;
 //contentCell.mealCostTextField.delegate = contentCell;

 contentCell.mealNameTextField.text = @"Yeah";
 contentCell.mealCostTextField.text = @"£1.50";

 return contentCell;
 }
}

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

licensed under cc by-sa 3.0 with attribution.