Передача заголовка раздела tableview в заголовок панели навигации другого представления

#ios #objective-c #uitableview #uitableviewsectionheader

#iOS #objective-c #uitableview #uitableviewsectionheader

Вопрос:

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

просмотр1

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 30)];

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:headerView.frame];
    imageView.image = [UIImage imageNamed:@"bg_blue.png"];
    [headerView addSubview:imageView];

    UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, kScreenWidth, 20)];
    title.textColor = [UIColor whiteColor];
    CategoryListData *data = self.dataArray[section];
    title.text = data.categoryTitle;
    [headerView addSubview:title];

    return headerView;
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    MainHeaderTableViewCell *tableCell = (MainHeaderTableViewCell *)collectionView.superview.superview;
    CategoryListData *data = self.dataArray[tableCell.index];
    CategoryDetailData *detailData = data.categoryList[indexPath.row];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    View2 *vc = [storyboard instantiateViewControllerWithIdentifier:@"View2"];
    vc.detailData = detailData;
    vc.hidesBottomBarWhenPushed = YES;
    [self.navigationController pushViewController:vc animated:YES];
}
 

просмотр2

 - (void)initNavigationTitle {
    [self setupNavigationTitle:self.detailData.title backButtonWithAnimated:YES]; // this line need to be replaced with section name from view1

}
 

Я пытаюсь сделать что-то подобное в view2

 CategoryListData *data = self.dataArray[section];
title.text = data.categoryTitle;
[self setupNavigationTitle:title.text backButtonWithAnimated:YES];
 

Но как я могу передать раздел параметров из view1 в view2?

Комментарии:

1. Можете ли вы показать код, как вы нажимаете view2.

2. @New16 хорошо, я только что обновил вопрос

3. Итак, вы использовали представление коллекции в ячейке tableview?

4. @Jack да, точно

5. Так почему бы не добавить push-код в метод tableview Didselectrow??

Ответ №1:

 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    MainHeaderTableViewCell *tableCell = (MainHeaderTableViewCell *)collectionView.superview.superview;
    CategoryListData *data = self.dataArray[tableCell.index];
    CategoryDetailData *detailData = data.categoryList[indexPath.row];

    NSString *sectionTitle = [self.dataArray[tableCell.index] categoryTitle];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    View2 *vc = [storyboard instantiateViewControllerWithIdentifier:@"View2"];
    vc.detailData = detailData;
    vc.title = sectionTitle;
    vc.hidesBottomBarWhenPushed = YES;
    [self.navigationController pushViewController:vc animated:YES];
}
 

Комментарии:

1. Спасибо, но возникает проблема, когда я нажимаю на другой раздел, а затем перехожу к view2, он по-прежнему показывает заголовок с моего первого нажатия. Как я могу это обновить?

2. Этого не должно произойти. Потому что вы создаете новый ViewController каждый раз, когда выбираете ячейку. Выполните отладку, чтобы убедиться, что строковое значение sectionTitle является правильным.

3. понял! я изменил на это NSString *sectionTitle = [self.dataArray[tableCell.index] categoryTitle];