2015-06-26 3 views
3

Как можно подготовить SEGUE должным образом изнутри UIView НЕ UIViewControllerКак выполнить переход внутри UIView

Моя UIViewController имеет вид контейнера, так и внутри, что вид контейнера имеет кнопку.

class myInnerView: UIView { 
    ... 
    func myButton(gesture: UIGestureRecognizer){ 
     //calling a perform segue from another UIViewController does not recognize the SegueID 
     //ViewController().self.showProfile(self.id) -- DOES NOT WORK 
    } 
} 

class ViewController: UIViewController { 
    ... 
    func showProfile(id: String){ 
     ... 
     self.performSegueWithIdentifier("toViewProfile", sender: self) 
    } 
} 

ответ

4

Ваш взгляд не должен касаться нажатия кнопки. Это должно обрабатываться контроллером . (Вот почему он называется «контроллер», а UIView называется «просмотр»).

MVC as described by Apple.

+0

Законно установить действие на UIView, который нацелен на UIViewController? – Steven

+0

Это, конечно, не рекомендуется. В представлении должны отображаться элементы, а не контроллеры просмотра огня. – Mundi

-1

Если кнопка является подзором вашего вида контроллера, вы можете перетащить IBAction onTouchUpInside с кнопки на контроллер вашего вида. Затем вы можете инициировать segue из этого метода.

+0

Не могли бы вы показать с некоторым кодом, как «инициализировать segue из этого метода»? Потому что я пытаюсь переопределить подготовку к segue, но он никогда не будет вызван –

-1

Одним из раствора добавить UITapGestureRecognizer к кнопке, но внутри UIViewController:

class ViewController: UIViewController { 

    var myInnerView = myInnerView() 

    override func viewDidLoad() { 
     let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.handleTapGesture)) 
     self.myInnerView.myButton.addGestureRecognizer(tap) 
    } 

    @objc func handleTapGesture(){ 
     performSegue(withIdentifier: "toViewProfile", sender: nil) 
    } 
} 

class myInnerView: UIView { 
    // make outlet of your button so you can add the tapGestureRecognizer from your ViewController and thats all 
    @IBOutlet public weak var myButton: UIButton! 
} 
-1

Вам нужно нажать жест для просмотра для навигации

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


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) 
} 
Смежные вопросы