В настоящее время я создаю табличное представление с детализацией, и у меня возникают некоторые проблемы. Я использую prepareforsegue для вызова следующего представления, и я использую метод didselectrowatIndexpath для передачи данных из исходного представления в представление назначения.prepareforsegue vs didselectrowatindexpath
У меня есть следующая проблема: 1) Когда я выбираю ячейку, то prepareforsegue вызываются перед didSelectRowAtIndexPath что означает вид вызывается перед моими данные могут быть переданы в следующее представление 2) У меня есть performseguewithidentifier в мой didselectrowatIndexpath, и он, кажется, вызывает segue дважды (после инициализации с помощью prepareforsegue и во второй раз с помощью performseguueithidentifier).
Какова наилучшая практика использования раскадровки для передачи данных из одного табличного представления в другой и как лучше всего вызвать следующий вид?
Вот некоторые из моего кода:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (level == 0) {
int muscleID = [muscleIDArray[indexPath.row] intValue];
NSLog(@"MuscleID: %i", muscleID);
NSArray *submuscleArray = [self submuscleGroup:muscleID valueForKeyPath:@"submuscleID"];
if (submuscleArray == nil || [submuscleArray count] == 0) {
currentMID = muscleID;
level = 2;
[self performSegueWithIdentifier:@"drillDown2" sender:self];
} else {
currentMID = muscleID;
level = 1;
[self performSegueWithIdentifier:@"drillDown" sender:self];
}
} else if (level == 1) {
level = 2;
currentSMID = [submuscleIDArray[indexPath.row] intValue];
[self performSegueWithIdentifier:@"drillDown2" sender:self];
} else {
detailTitle = [[exerciseList valueForKey:[exerciseListSorted objectAtIndex:indexPath.row]] objectAtIndex:0];
exerciseID = [[exerciseListSorted objectAtIndex:indexPath.row] intValue];
[self performSegueWithIdentifier:@"showExerciseDetail" sender:self];
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"showExerciseDetail"]) {
//ExerciseDetail *exerciseDetail = (ExerciseDetail *)segue.destinationViewController;
//exerciseDetail.pageTitle = detailTitle;
UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
ExerciseDetail *exerciseDetail = (ExerciseDetail *)navController.topViewController;
exerciseDetail.title = detailTitle;
exerciseDetail.exerciseID = exerciseID;
} else if ([segue.identifier isEqualToString:@"drillDown"] || [segue.identifier isEqualToString:@"drillDown2"]){
//UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
ExerciseTableViewController *tableView = segue.destinationViewController;
tableView.delegate = self;
tableView.level = level;
tableView.currentSMID = currentSMID;
tableView.currentMID = currentMID;
NSLog(@"level: %i, currentSMID: %i, currentMID: %i", level, currentSMID, currentMID);
} else if ([segue.identifier isEqualToString:@"addExercise"]){
UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
AddExerciseViewController *addExercise = (AddExerciseViewController *)navController.topViewController;
addExercise.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
} else if ([segue.identifier isEqualToString:@"dismissView"]){
[self dismissViewControllerAnimated:YES completion:nil];
}
}
помог мне поблагодарить –