Задать вопрос
Waka_Waka
@Waka_Waka
IOS Developer

Как передать данные из UITableViewCell в UIViewController?

Добрый день))
Проблема в следующем: есть ячейка в TableView, которая содержит один UIImageView, один Label и кнопку. По нажатии на кнопку, осуществляется переход на другой UIViewController.
Вопрос: как передать данные, которые находятся в ячейке, в UIViewController при переходе на него после нажатия кнопки?

Никак не могу сообразить, пробовал как-то через Segue передать из класса ячейки, не работает.

Да, у ячейки свой класс.
  • Вопрос задан
  • 4178 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
@dotAramis
Проанализируйте свою архитектуру, если Вам необходимо получать данные из ячейки - это, к сожалению, ошибка архитектуры. Ячейки предназначены только для отображения данных из источника данных (собственно, datasouce у collection view). Если после "нажатия" на кнопку происходит или segue, то индекс ячейки можно определить:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
//не забыть проверить, кто такой sender
    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
//получить данные из datasource
}


Главное, что нужно понять - cell предназначен только для отображения данных, вся логика источника данных - или в контроллер, или в отдельный делегат (что лучше, конечно)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@onepavel
Консультация и разработка мобильных приложений
Не видя вашего кода, полагаю вам нужно попробовать еще поработать с segue
Уважаемый Ray опубликовал добротный туториал по сторибордам
www.raywenderlich.com/50310/storyboards-tutorial-i...
Я не очень много работал со сторибордами, больше по старинке с xib'ами
но передача должна проходить как в примере Рея
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"PickGame"]) {
        GamePickerViewController *gamePickerViewController = segue.destinationViewController;
        gamePickerViewController.delegate = self;
        gamePickerViewController.game = _game;
    }
}
Ответ написан
Flanker_4
@Flanker_4
Обычно это делают через делегирование
Вот тут пример
stackoverflow.com/questions/8062572/adding-a-deleg...

Если не хочется писать много метакода, нужно быстро и Вам плевать на идеальность можно сразу повесить обработчик на кнопку
stackoverflow.com/questions/4910323/delegate-from-...
А номер элемента передавать через button tag. Хотя получится изврат...

Еще один из вариантов - блоки, это если Вам не по-душе делегирование
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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