У меня есть два табличных представления, в одном есть несколько ячеек табличного представления, каждая ячейка открывает одно и то же подпредставление, но инициализируется новыми данными.
В таблице около 100-200 записей, и у меня есть дополнительный вид, который представляет собой галочку, которая при выборе ячейки отмечает ячейку, а затем снова загружает основной вид.
Если я выберу ту же ячейку, чтобы вернуть тот же набор данных, она загрузит ранее выбранную ячейку в середине экрана (поэтому она знает свой индексный путь), однако галочка «в зависимости от того, насколько глубоко в списке» будет или не будет видна ..
Он имеет тенденцию работать примерно в верхних 30/40% таблицы, но все, что ниже галочки, не будет видно ... то есть, если я не буду ходить вперед и назад, становясь все глубже и глубже каждый раз, тогда иногда я могу получить галочку. в более глубокой части таблицы. Кто-нибудь знает, почему это происходит?
Случалось ли с кем-нибудь что-то в этом роде раньше?
При дальнейшем расследовании я думаю, что внутри этого метода что-то идет не так.
Прежде всего, в подпредставлении, когда пользователь выбирает ячейку, этот метод вызывается
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
[self.navigationController popViewControllerAnimated:YES]; //pops current view from the navigatoin stack
//accesses selected cells content
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
// now you can use cell.textLabel.text
//This if statment is based off which cell was selected in the parent view so that it knows which cell to pass the data back to
if (parentViewSelectedIndexPath.section == 0) {
if (parentViewSelectedIndexPath.row == 0) {
manufactureCellTextLabel = cell.textLabel.text; //passing label text over to NSString for use with delegate (check "viewwilldissapear")
[[self delegate] setManufactureSearchFields:manufactureCellTextLabel withIndexPath:indexPath]; //This is where I pass the value back to the mainview
}
// a few more If statements for the other methods I can pass data too.
//--- this if block allows only one cell selection at a time
if (oldCheckedData == nil) { // No selection made yet
oldCheckedData = indexPath;
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
}
else {
UITableViewCell *formerSelectedcell = [tableView cellForRowAtIndexPath:oldCheckedData]; // finding the already selected cell
[formerSelectedcell setAccessoryType:UITableViewCellAccessoryNone];
[cell setAccessoryType:UITableViewCellAccessoryCheckmark]; // 'select' the new cell
oldCheckedData = indexPath;
}
}
Это передает путь индекса методу основного представления...
- (void) setManufactureSearchFields:(NSString *)cellLabeltext withIndexPath:(NSIndexPath *)myIndexPath
{
manufactureSearchObjectString = cellLabeltext;
manufactureResultIndexPath = myIndexPath;
[self.tableView reloadData]; //reloads the tabels so you can see the value.
}
// Который затем устанавливает factoryResultIndexPath, который используется в следующем методе, чтобы передать его обратно в подпредставление
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
//--- Idendify selected indexPath (section/row)
if (indexPath.section == 0) {
//--- Get the subview ready for use
VehicleResultViewController *vehicleResultViewController = [[VehicleResultViewController alloc] initWithNibName:@"VehicleResultViewController" bundle:nil];
// ...
//--- Sets the back button for the new view that loads
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil] autorelease];
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:vehicleResultViewController animated:YES];
[vehicleResultViewController setDelegate:self];
if (indexPath.row == 0)
{
vehicleResultViewController.title = @"Manufacture";
[vehicleResultViewController setRequestString:@"ID.xml"]; //sets the request string in searchResultsViewController
vehicleResultViewController.dataSetToParse = @"ID"; // This is used to controll what data is shown on subview... logic
[vehicleResultViewController setAccessoryIndexPath:manufactureResultIndexPath]; //sends indexpath back to subview for accessory tick
vehicleResultViewController.parentViewSelectedIndexPath = indexPath;
}
//etc etc
}
И, наконец, я передаю его методу в моем подразделе, который передает indexpath в oldCheckedData.
- (void)setAccessoryIndexPath:(NSIndexPath *)myLastIndexPath
{
oldCheckedData = myLastIndexPath;
[self.tableView reloadData]; //<<---- this is where I reload the table to show the tick...
}