Раскадровка Segue От контроллера представления к себе

Я пытаюсь создать механизм для детализации списка файлов /папок. Идея состоит в том, чтобы каждый раз, когда пользователь выбирает папку, показывать один и тот же контроллер представления списка файлов и показывать контроллер представления подробного файла, если он выбирает файл.

До сих пор я создал переход от контроллера представления списка файлов к контроллеру представления подробного файла и переход от ячейки представления таблицы списка файлов к контроллеру представления таблицы файлов:

 введите описание изображения здесь

Проблема в том, что, как только пользователь коснется ячейки, будет выполнен переход. Я хотел бы удалить переход из ячейки табличного представления и сделать один из контроллера представления списка файлов к себе. Таким образом, я мог программно инициировать правильную передачу, когда пользователь коснулся ячейки.

Итак, мой вопрос: возможно ли создать переход от контроллера представления к себе в Интерфейсном Разработчике?

72 голоса | спросил Jorge 10 FebruaryEurope/MoscowbFri, 10 Feb 2012 15:20:29 +0400000000pmFri, 10 Feb 2012 15:20:29 +040012 2012, 15:20:29

9 ответов


0

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

ответил T.J. 10 FebruaryEurope/MoscowbFri, 10 Feb 2012 19:40:55 +0400000000pmFri, 10 Feb 2012 19:40:55 +040012 2012, 19:40:55
0

Если вы используете контроллер навигации, вам нужно вставить ViewController в стек навигации. В этом примере я назвал мой ViewController «VDI» в настройках идентификатора раскадровки.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"];
[self.navigationController pushViewController:dest animated:YES];

Если вы не хотите, чтобы NavigationController продолжал добавлять себя в историю «Назад», вы можете вытолкнуть стопку перед добавлением в нее следующим образом.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"];
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:dest animated:YES];
ответил Jim True 16 AMpTue, 16 Apr 2013 01:12:50 +040012Tuesday 2013, 01:12:50
0

Использование Xcode 5 дает гораздо более простое решение.

  1. Нажмите на ячейку таблицы в раскадровке
  2. Откройте Инспектор соединений (значок со стрелкой вправо в правом верхнем углу)
  3. В разделе "запущенные сегменты" вы видите "выбор"
  4. Перетащите из круга рядом с "выделением" в ячейку раскадровки

Вот и все.

ответил John Henckel 3 Mayam14 2014, 00:16:55
0

Вместо того, чтобы выполнять переход к одному и тому же контроллеру, вы можете создать экземпляр контроллера представления (того же самого) из раскадровки, а затем вставить его в контроллер навигации.

ответил Mustafa 29 J000000Sunday12 2012, 08:33:50
0

В IOS 6 существует более чистое решение , чем использование фантомной кнопки. Вы все еще можете определить переход от ячейки таблицы к контроллеру представления и посмотреть на отправителя, чтобы отменить автоматически инициируемый переход:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //storyboards should use segues and override prepareForSegue instead
    //but here we need custom logic to determine which segue to use
    id item = [self.fetchedResultsController objectAtIndexPath:indexPath];
    if (item meets condition) {
        [self performSegueWithIdentifier:@"segue1" sender:self];
    } else {
        [self performSegueWithIdentifier:@"segue2" sender:self];
    }
}

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    //ignore segue from cell since we we are calling manually in didSelectRowAtIndexPath
    return (sender == self);
}
ответил Chris 27 AMpSat, 27 Apr 2013 07:17:57 +040017Saturday 2013, 07:17:57
0

Подход Interface Builder: просто перейдите к ссылке на раскадровку, которая ссылается на контроллер представления.

ответил Joshua C. Lerner 26 J000000Wednesday17 2017, 17:29:20
0

Правильный ответ - использовать Storyboard Reference, которая ссылается на UIViewController, который вы хотите передать себе, а затем указать на него.

 введите описание изображения здесь

ответил Sethmr 10 Jpm1000000pmWed, 10 Jan 2018 21:35:38 +030018 2018, 21:35:38
0

Вот как вы можете протолкнуть другой экземпляр текущего контроллера представления без определения перехода или жесткого кодирования его собственного идентификатора:

SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restorationIdentifier];
[self.navigationController pushViewController: same animated: YES];

Вам просто нужно установить идентификатор восстановления таким же, как идентификатор раскадровки (для этого есть флажок в IB).

 Идентификатор восстановления

ответил Tomas Andrle 19 J000000Tuesday16 2016, 12:23:37
0

Надеюсь, это поможет.

Я обнаружил, что вы можете создать несколько ячеек-прототипов.

Чем вы можете связать каждую ячейку (в раскадровке) с другим представлением.

Примерно так:

NSString *CellIdentifier = @"Cell"; 
if (Condition2 ){
CellIdentifier = @"Cell2"; } 
if (Condition3 ){
CellIdentifier = @"Cell3"; }
ответил Yari 28 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 28 Sep 2013 16:55:36 +0400 2013, 16:55:36

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132