2017-01-29 5 views
1

Это кажется мне настолько исправленным, но у меня проблемы с ним. Я просто хочу перейти к другому контроллеру tableview, когда используется некоторая статическая ячейка.Segue от STATIC tableviewcell до нового контроллера tableview

Я получил контрольный элемент от ячейки до нового контроллера tableviewcontroller, и с этим не было никаких проблем - создается segue. Но когда я запускаю приложение, ничего не происходит, когда я нажимаю на ячейку. У кого-то есть такая же проблема?

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let storyboard : UIStoryboard = UIStoryboard (name: "groups", bundle: nil) 
    let groupsVC = storyboard.instantiateViewController(withIdentifier: "groups") as! GroupsViewController 
    if indexPath.section == 1 && indexPath.row == 0 { 
    self.navigationController?.pushViewController(groupsVC, animated: true) 
    } 
+0

может у показать уры попробовали код –

+0

у меня нет какого-либо показывать. У меня сложилось впечатление, что это будет работать так же, как uibutton, где вы можете просто перетащить с кнопки на новый контроллер представления в раскадровке. – ChrisK

ответ

0

Вам необходимо реализовать метод делегата в вашем tableViewController:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
// Handle your tap to the cell here 

    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    YourViewControllerToPush *vc= [storyboard instantiateViewControllerWithIdentifier:@"YourViewControllerStoryboardIdentifier"]; 

[self.navigationController pushViewController:vc animated:YES]; 
// Or to present it [self presentViewController:vc animated:YES completion:nil]; 

} 

EDIT: Вы также можете использовать метод идентификатор Segue, as described here: Однако, вам нужно вызвать действие в любом случае внутри делегата, описанного выше.

[self performSegueWithIdentifier:@"MySegue" sender:sender]; 

Swift:

Push viewcontroller

didSelectRowAtIndexPath

+0

Так что это можно сделать только программно? Я думал, что это будет похоже на раскадровку, используемую для перехода к новому контроллеру. – ChrisK

+0

Да. TableViewCell не является кнопкой. Вы должны обрабатывать выделение внутри метода делегата, как я писал. Ваш вариант 1: если вы хотите программно нажать на viewController, используйте первый метод выше. Но вам нужно установить storyBoardIdentifier для viewController. Нажмите viewcontroller, и в правой части вы можете установить идентификатор раскадровки. Вариант 2: привяжите свой контроллер просмотра с помощью segue, назовите segue с идентификатором в раскадровке и используйте второй вариант «performSegue ...», я предпочитаю, чтобы первый метод был намного чище. Примите ответ, если это решит вашу проблему. –

+0

@ChrisK Вы также можете добавить кнопку в ячейку и добавить действие к кнопке соты. Но это так же чисто, если вы не хотите настроить дизайн кнопки, тогда все в порядке.Однако вам нужно добавить действие к кнопке. –

0

Если у вас есть статические клетки, созданные в UITableViewController не UIViewController с UITableView на нем, вы можете сделать переход к другому контроллеру в пределах UIStoryboard.

enter image description here

После этого, если вы используете нажимной SEGUE, убедитесь, что UITableViewController встроен в UINavigationController.

enter image description here

+0

это то, что я попробовал изначально и не повезло ... с нашим без встроенного контроллера навигации. Мне интересно, не работает ли это, потому что этот контроллер табличного обзора не мой первоначальный контроллер? EDIT - я просто понял, что вы сказали, что у стола есть табличный вид сверху контроллера таблицы. Это кажется менее чистым ... Сначала я попробую решение @Sneak. Благодарю. – ChrisK

+0

Этот метод выше работает без кода в качестве запрошенного u, и я не сказал, чтобы использовать tableview сверху viewcontroller, я сказал точно противоположное. Пожалуйста, внимательно прочитайте, прежде чем перейти к выводам. – Aragunz

+0

Спасибо, что нашли время написать такой прекрасный ответ. Не понимая инструкции, это не то же самое, что «прыгать на выводы». «в UITableViewController ... с UITableView поверх него» звучит так же, как «поставить табличное представление поверх контроллера tableview», но, возможно, мне нужно получить больше опыта. Еще раз спасибо за вашу помощь. – ChrisK

0

Я последовал за решение Aragunz, который изначально не работал ... Я узнал пару часов спустя я был tapGestureRecognizer на моей TableView, чтобы позволить ему закрыть клавиатуру, когда он постучал.

Это противоречило набору sgue на статической ячейке. Я прокомментировал код, связанное tapGesture и все работало нормально

//  let tapGesture = UITapGestureRecognizer(target: self, action: #selector(SettingsTableViewController.hideKeyboard)) 
//  tapGesture.cancelsTouchesInView = true 
//  settingsTableView.addGestureRecognizer(tapGesture) 

мне придется найти другое решение уволить мою клавиатуру: D

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