2015-01-11 3 views
0

Я использую didDeselectRowAtIndexPath для навигации по различной раскадровке, как:Segue VS didDeselectRowAtIndexPath

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let story = ["News","Video","Twitter","Request Info","More"] 

    let vc = self.storyboard?.instantiateViewControllerWithIdentifier(story[indexPath.row]) as NewsFeedTableViewController 
    self.presentViewController(vc, animated: true, completion: nil) 

} 

Однако, то Navigation Bar не появляется, когда я использую эту функцию. Но, когда я использую segue, появляется Navigation Bar.

Теперь проблема:

  1. Cells в tableView не может непосредственно перейти более 1 раскадровка
  2. Нужна панель навигации для прокрутки в App (который, кажется, нуждается Segue)

Любой решения через это?

ответ

2

Вы используете presentViewController, поэтому вы не получаете навигационную панель, она представляет вид в моде. Вместо этого pushViewController как:

self.navigationController?.pushViewController(vc, animated: true) 

Вероятно, в раскадровку тип Segue будет push, поэтому вы получаете панель навигации.

Вы можете быть заинтересованы в следующих:

  1. presentViewController:animated:completion:
  2. ViewController Programming Guide for iOS
+0

Я не могу импортировать в него обычный 'ViewController', поскольку он может только нажать« TableViewController », который является контроллером базового представления. Свифт говорит, что «Swift Dynamic Caste Failed». Любое решение? – tika

+0

@ user2078462: Нет, это неправильно, вы можете нажать любые контроллеры view (если у вашего родительского дома есть UINavigationCotroller) –

+0

Похоже, что он загружает 'super.viewDidLoad()' родительского класса при нажатии нового ViewController – tika

0

Вы представляете следующий контроллер представления, не нажимая на него. (по крайней мере, в случае 1) Таким образом, у вас есть модальная ссылка и нет контроллера nav!

Вы можете использовать .pushViewController или просто performSegue и убедитесь, что ваш тип сегмента push. Я бы пошел за performSegue и изменил имя identifier в каждом коммутационном поле.

И вы можете передать данные в prepareForSegue

-1

лучше назвать performSegue в didSelectRow. И выполните действия в perpareSegue Method.

+0

Какая проблема при этом? – coreDeviOS

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