2016-10-18 6 views
3

Интересно, возможно ли связать объект UIView с UIViewController. Подключив UIView, я хочу перейти на второй контроллер представления. Я пытался несколько раз перетаскивать и кодировать, но я просто не смог. Я ищу способы, которые не нужно программировать, как использование seague.Как выполнить segue, нажав UIView

Есть ли что-либо, что может достигнуть этой цели?

Благодаря

+1

Что вы имеете в виду под «connect»? –

+0

нравится '.addSubview''? –

+0

Итак, я хочу перейти на второй контроллер просмотра, щелкнув UIView. @DavidSeek – bagels

ответ

3

Чтобы выполнить переход, нажав UIView, вам нужно добавить жест распознаватель. В моем примере я создаю экземпляр и добавил Subclass из UIView программно:

viewDidLoad(){ 

    // here we instantiate an object of our subclass 
    let customView = MyViewSubclass(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
    // here we add it to our ViewController 
    self.view.addSubview(customView) 

    // here we instantiate an object of gesture recognizer 
    let gestureRec = UITapGestureRecognizer(target: self, action: #selector (self.someAction (_:))) 
    // here we add it to our custom view 
    customView.addGestureRecognizer(gestureRec) 
} 

func someAction(sender:UITapGestureRecognizer){  
    performSegueWithIdentifier("Whazzzzup", sender: self) 
} 

// Swift 3 
func someAction(_ sender:UITapGestureRecognizer){ 

    // this is the function that lets us perform the segue 
    performSegue(withIdentifier: "Whazzzup", sender: self) 
} 

Если вы не имеете Subclass из UIView, то вы просто добавить UIView ...

let customView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 

Также вы можете конечно, просто возьмите ваш UIView Outlet и добавьте к нему распознаватель жестов.

let gestureRec = UITapGestureRecognizer(target: self, action: #selector (self.someAction (_:))) 
myView.addGestureRecognizer(gestureRec) 

представить ViewControllerбез Segue, вам нужно создать экземпляр ViewController:

func someAction(_ sender:UITapGestureRecognizer){ 
    let controller = storyboard?.instantiateViewController(withIdentifier: "someViewController") 
    self.present(controller!, animated: true, completion: nil) 
    // swift 2 
    // self.presentViewController(controller, animated: true, completion: nil) 
} 

Вы должны установить withIdentifier в атрибуте инспектор ViewController по:

enter image description here

В этом примере withIdentifier будет: LandingVC

Если вы используете UINavigationController и хочет back Button, вы нажимаете ViewController на навигационном стеке: (., По крайней мере сейчас)

self.navigationController?.pushViewController(controller!, animated: true) 
+0

Спасибо! Но сейчас он не работает, потому что я не очень хорошо это реализую. Где я должен установить идентификатор? Я подготовил UITableVIewControoler и привязал имя вызова к разделу идентификатора. Это верно? Если нет, к чему относится идентификатор? – bagels

+0

ладно, я вижу, тогда нет segue, но нажмите контроллер просмотра. сек –

+0

см. мое редактирование. вам нужно установить идентификатор раскадровки для своего контроллера и установить его как 'withIdentifier' –

5

Раскадровка режим поддерживает это Перетащите Tap Распознаватель жестов на ваш взгляд, который вы хотите щелкнуть. Затем подключите распознаватель жестов к представлению, которое вы хотите показать, так же как и любой другой переход segue. Удостоверьтесь, что любые содержащие представления «Включено взаимодействие с пользователем». Не требуется код. Apple Documentation

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