2012-04-21 6 views
8

Я пытаюсь сделать что-то очень просто: настройте segue, чтобы при нажатии на ячейку в таблице она переведет вас в другой контроллер View. Я полагаю, что проблема связана с тем фактом, что TableView, в котором находятся эти ячейки, встроен в обычный ViewController (в отличие от TableViewController) и является одним из двух подзонов в этом ViewController.Table View Cell Segues не работает

Насколько я могу судить, я правильно настроил: я встроил ViewController в два поднабора в навигационном Contoller, установил его как источник данных и делегат для TableView, и создал push-сегу из TableViewCell на мой второй контроллер просмотра в раскадровке. Однако, когда приложение запускается и пользователь щелкает строку в таблице, он просто выбирает строку, а segue вообще не срабатывает (я отлаживал ее, и функция prepareForSegue даже не вызывается).

Есть ли что-то, что мне не хватает здесь? Или это по какой-то причине невозможно, если TableView не является единственным видом в своем контроллере представлений?

+0

вы дали ячеек таблицы уникальные идентификаторы –

+0

даю ячейки идентификатор «LoadCell» как в раскадровке (в атрибутах ячейки прототипа), так и в функции cellForRowAtIndexPath; это правильно или должна ли каждая отдельная ячейка иметь отдельный идентификатор, когда она создана? – generaltsow

ответ

2

Если вы создаете раскадровки в Xcode, то сделайте следующее:

  1. Создать UITableViewController
  2. Добавить прототип UITableViewCell
  3. Создание UIViewController, который будет вашей целевой переход.
  4. Control-Нажмите на прототипе UITableViewCell и перетащите его в цель.

Всё. Вероятно, вы захотите изменить характеристики UITableViewCell, например, вашего подкласса UITableViewCell.

+2

Это именно то, что я сделал, за исключением того, что вместо того, чтобы иметь UITableViewController, у меня есть обычный UIViewController, с UITableView (а также другой UIView) в качестве подзонов в основном представлении. Это все еще не работает. – generaltsow

+0

В Xcode, является ли столбец tableViewCell «push», связанный с контроллером, который является вашей целевой сетью? – GoZoner

+0

Да, конечно. – generaltsow

4

Это может или не поможет вам, но я столкнулся с этой проблемой, потому что я определил два разных типа ячеек и выполнил реализацию didSelectRowAtIndexPath. Мне пришлось добавить [self performSegueWithIdentifier:@"Whatever" sender:self] как часть didSelectRowAtIndexPath, и проблема была решена.

Если вы можете хотя бы определить выбор ряда, вы можете воспользоваться этим методом.

+0

Это решило проблему для меня, но с отправителем в качестве ячейки: 'sender: [self.tableView cellForRowAtIndexPath: indexPath]' – brasskazoo

4

Если вы настроили визуализации клеток, например .:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

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

Таким образом, в этом случае «Идентификатор» ячейки, подключенной к сеансу, должен быть установлен на «Сотовый».

+0

Прошло два часа, пытаясь понять это (только что началось с Objective-C сегодня, спасибо большое, что меня сбило с толку! –

+0

Это ответ, спасибо. –

4

Я считаю, что если бы я был недавно телеграфировал SEGUE от аксессуара зрения клетки, а затем удалить SEGUE и попытаться подключить новый SEGUE к ячейке непосредственно он не работы (с использованием Xcode 4.6.2) - - Xcode поддерживает подключение segue к аксессуару (даже если его нет)! Способ, которым я исправил это: выбирая ячейку в IB и используя инспектор соединения, чтобы (1) удалить исходное «вспомогательное действие» и (2), непосредственно проведите «выбор», перетащив из заполненного круга на изображении ниже к соответствующему контроллеру вида назначения.

enter image description here

+0

Вы правы. Это то, что происходит. –

+0

все еще актуально для Xcode 8 :) спасибо большое. решила мою проблему – gutte

-1

была такая же проблема.Segue из ячейки представления прототипа таблицы внутри обычного контроллера просмотра приведет к сбою приложения. Если у кого-то такая же проблема.

Мое решение:

Если вы используете толчок Segue убедитесь, что ваш первый View Controller с табличном встроен в контроллер навигации иначе «толчок перетекает» не будет работать. Также укажите segue в диспетчере View View, а не на навигационном контроллере!

Как уже упоминалось ранее, убедитесь, что ваши идентификаторы «segue» указаны правильно.

на "didSelectRowAtIndexPath" я называю "[себе performSegueWithIdentifier: @" Your_destination_View_Controller»отправитель: само];

+0

Добавление performSegueWithIdentifier заставляет мое приложение сбой, бросая ошибку утверждения в - [UITableViewCell _setHostsLayoutEngine:]. По-видимому, никто не имел/не разрешал этот вопрос раньше, так как для него здесь нет ответа на SO. –

0

Я имел подобный вопрос Фикс 1. Запись SegueIdentifier для Segue в раскадровке 2.. Добавьте следующую строку [само performSegueWithIdentifier: @ отправителем «SegueIdentifier»: ноль],..? в didSelectRowAtIndexPath

Я надеюсь, что это поможет

+0

Работал для меня. Благодаря! – kalan

+0

Добавление performSegueWithIdentifier приводит к сбою моего приложения, вызывая отказ утверждения в - [UITableViewCell _setHostsLayoutEngine:]. По-видимому, никто не имел/не разрешал этот вопрос раньше, так как для него здесь нет ответа на SO. –

Смежные вопросы