2015-08-24 3 views
0

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

Прямо сейчас, у меня есть одна кнопка, связанная с контроллером, но когда я нажимаю на ячейку прототипа tableview, которая переводится на другой контроллер (в раскадровке), ничего не происходит. Я тоже не ошибаюсь.

Каков наилучший способ обойти это? Могу ли я сделать два разных этапа в раскадровке? Или мне нужно что-то реализовать в методе tableview, чтобы выбрать строку в пути указателя, каким-то образом захватить класс, связанный с нажатой клавишей и программным путем перейти на другой экран? Что-то вроде: Func Tableview (Tableview: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { Println ("здесь") //self.performSegueWithIdentifier("profileSeg», отправитель: самость) }

Я не получают println здесь, когда я выбираю ячейку и да, я назначил делегата в viewdidload.

EDIT

Я просто понял, что я сделал ошибку, объясняя этот вопрос. На самом деле у меня есть представление внизу, которое связано с одним контроллером представления. Это не таблица tableview ... Это работает seg. Но у меня есть ctrl, перетаскиваемый из одного типа ячейки во второй controlleR, и что seg не работает. Существуют также 3 других типа клеток, ни один из которых не прикреплен. Это связано с проблемой?

+0

Это связано с тем, что вы подключили segue к другому ViewController из выбора ячейки в Storyboard, удалите это из выбора ячеек и снова добавьте с ViewController в ViewController, хотя вам нужно будет вызывать определенный segue с их идентификаторами. – iphonic

+0

@iphonic, когда вы говорите повторно добавить из viewController в viewController, что именно вы имеете в виду. i ctrl перетащите желтый значок на 2-й и thrid-контроллеры, но где я перетаскиваю его с первого контроллера? (если не из выбора ячейки) – user2363025

+0

@iphonic Я удалил segues из выбора ячейки и подключил viewControllerA к viewControllerB и viewControllerC. Теперь не выполняется никаких сеансов – user2363025

ответ

1

Если didSelectRowAtIndexPath не работает, это может быть вызвано либо ваш UITableViewDelegate не был установлен, или, может возможно, что выбор вашего UITableView был выключен, необходимо Чтобы включить его, см. изображение.

enter image description here

Приветствия.

0

Есть два способа сделать то, что вы хотите:

Во-первых, если вы хотите связать ОДИН TVcell с одним ViewController вы могли бы делать то, что вы начали делать: Link каждый TVcell с ViewController вы хотите, чтобы перейти от там. Для этого удерживайте Ctrl и перетащите его из прототипа в ViewController. Таким образом, каждый TVCellPrototype может иметь один сегмент, и если вы нажмете на ячейку, он автоматически выполнит segue. Это также причина, по которой ваш код не печатает «профиль seg». В этом случае вам не нужно указывать идентификатор segue.

Второй способ лучше, если вам нужно иметь МНОЖЕСТВЕННЫЕ segues от одного TVCell до 2 или более ViewControllers. Для этого вы связываете ViewController из TVCells с ViewControllers, который хотите использовать. Таким образом, вы можете установить столько раз, сколько хотите, но вы должны дать им идентификатор, потому что вы должны вызвать их в функции tableView (... didSelectRowAtIndexPath). (щелкните по segue в построителе интерфейса, чтобы дать ему идентификатор). Это будет выглядеть так:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    self.performSegueWithIdentifier("ProfileSeg", sender: AnyObject?())   
} 

Теперь давайте поговорим о том, почему вы не получите Println («здесь»): Там должно быть ошибка по функции, так как нет «переопределение» перед Это. В общем случае компилятор не будет создавать ваше приложение, потому что он отсутствует. У меня нет всего кода, поэтому я не могу точно сказать, в чем ваша ошибка.

+0

мой метод выглядит следующим образом: FUNC Tableview (Tableview: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { Println ("здесь") //self.performSegueWithIdentifier("profileSeg», отправитель : self) } – user2363025

+0

оба способа, которые вы описали, я пробовал, и они не работали для меня. Я только когда-либо ссылаюсь на viewcontrollerB из cellprortotypeB, и я только когда-либо ссылаюсь на viewControllerC из cellprotypeC – user2363025

+0

Я только что понял, что ошибся при объяснении вопроса. На самом деле у меня есть представление внизу, которое связано с одним контроллером представления. Это не таблица tableview ... Это работает seg. Но у меня есть ctrl, перетаскиваемый из одного типа ячейки во второй элемент управления и что seg не работает. Существуют также 3 других типа клеток, ни один из которых не прикреплен. Это связано с проблемой? – user2363025

0

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

И пожалуйста добавьте этот код

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    println("You selected cell #\(indexPath.row)!") 
    if indexPath.row == 0{ 
     performSegueWithIdentifier("profileSeg", sender: self) 
    }else{ 
     performSegueWithIdentifier("anySeg", sender: self) 
    } 
} 
+0

Вы читали мои комментарии? Я пробовал это. Проблема в том, что я не вхожу в эту функцию – user2363025

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