2015-12-22 5 views
0

Я очень долго борюсь с этой проблемой.Collection View didSelectItemAtIndexPath segue

Причина была у меня была коллекция delegate & datasource под «CollectionView» не «CollectionView Controller», потому что я встроил один collectionView в один из TableView Cell

, но когда я хочу, чтобы настроить

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *) 
{ 
} 

Это мой код

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

{ 

static NSString * Cell; 
if (indexPath.section==0) 
{ 
    switch (indexPath.row) 
    { 
     case 0: 
      Cell = @"MoviesIntro"; 
      break; 
     case 1: 
      Cell = @"影片介紹"; 
      break; 
     case 2: 
      Cell = @"Moviesrelative"; 


      default: 
      break; 
    } 
} 
  
UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:Cell]; 
if (!cell) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Cell]; 
} 

switch (indexPath.row) 
{ 
    case 0: 
    { 

    } 
    break; 
    case 1: 
    { 

    } 
     break; 
    case 2: 
    { 

     Tony=(CollectionView*)[cell viewWithTag:741]; 
     Tony.pageImages =imagearray; 
     [Tony reloadData]; 

    } 
     break; 

    default: 
     break; 
} 
    return cell; 

}

Вот CollectionView.m код

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 

{ 
    self.pic_url=[comment[indexPath.row] objectForKey:@"pic_url"]; 
    self.name_zh=[comment[indexPath.row] objectForKey:@"name_zh"]; 
    self.name_en=[comment[indexPath.row]objectForKey:@"name_en"]; 
    self.intro=[comment[indexPath.row] objectForKey:@"short_Intro"]; 
    self._id=[comment[indexPath.row] objectForKey:@"_id"]; 
    self.trailer=[comment[indexPath.row] objectForKey:@"trailer"]; 
    self.movieTime=[comment[indexPath.row] objectForKey:@"movieTime"]; 
    self.picH_url=[comment[indexPath.row] objectForKey:@"picH_url"]; 
    self.category=[comment[indexPath.row] objectForKey:@"category"]; 
    self.director=[comment[indexPath.row] objectForKey:@"director"]; 
    self.actor=[comment[indexPath.row] objectForKey:@"actor"]; 
    self.language=[comment[indexPath.row] objectForKey:@"language"]; 
    self.MyList=false; 
    [UIView animateWithDuration:0.05 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ 
    } completion:^(BOOL finished) { 

    }]; 

}

Тони Коллекция view.h/м файлов. pageImages - это NSMutableArray на файлах Tony.h.

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

+0

Можете добавить код, пожалуйста? –

ответ

0

Вы можете установить добавить delegate переменные ваш UITableViewCell и а метод делегата, как:

- (void) pushToViewController; 

Затем в YourTableViewCell.m методы файл CollectionView делегат добавить:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *){ 
    [delegate pushToViewController]; 
} 

И «tableVi РЭБ контроллер "должен быть делегатом от вашего tableViewCell, в контроллере UITableView:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    YourTableViewCell *cell = ... 
    cell.delegate = self; 
} 
- (void) pushToViewController { 
    [self.navigationController pushViewController:someViewController animated:YES]; 
} 
+0

Я программист IOS новичков, и я постараюсь понять, как я могу создать делегат самостоятельно, спасибо большое ~~ –

+0

еще один вопрос «YourTableViewCell * cell = ...», что я должен добавить после ячейки? –

+0

Кажется, ваш код работает нормально. Этот вопрос является слишком простым, просто поможет Google uifyView. Удачи. –

0

предложение Уильяма Ху будет работать.

В целом вы не должны позволять своим элементам пользовательского интерфейса реализовывать свои собственные делегаты и источники данных. Он работает, но разбивает шаблон MVC. Вместо этого я бы использовал некоторый пользовательский UICollectionView, чтобы содержать некоторую ссылку на строку таблицы, к которой он принадлежит. Вы можете даже «злоупотреблять» свойством тега для этого (что мне лично не нравится, но это довольно распространенный шаблон) без необходимости подкласса UICollectionView.

Ваш UITableViewController может реализовать источник данных и делегат для представлений коллекции. При каждом вызове любого метода делегата ссылка на самый файл collectionView передается в метод, так что вы можете получить строку таблицы оттуда (которую вы должны установить в виде таблицы cellForRowAtIndexPath, конечно) и перейти оттуда.

Поэтому я бы предпочел перефразировать ваш код и придерживаться шаблона MVC.

+0

На самом деле, у меня было такое же мышление, но я не знаю, как это сделать (хотя я много раз искал много информации). У вас был какой-то веб-сайт, чтобы говорить об этом, так или иначе спасибо вам за предложение ~ ~~~ –