how to instantiate ViewController from UIView in SWIFT

前端 未结 2 2179
孤城傲影
孤城傲影 2020-12-22 12:58

I am trying to initialize view controller from my UiView. But i am getting error on the line self.presentViewController(vc, animated: true, completion: nil) . I am trying to

2条回答
  •  执笔经年
    2020-12-22 13:09

    However..i accomplised using a delegate to pass an id from UIView to UIViewController and checking to the id i instantiated ViewController From UIViewController class as Para said in his answer . I did it as below

    Steps:

    1) First create a protocol

    2) create a Variable delegate conforming to protocol

    3)Then create a call back method.

    //Step1:    
            protocol SendIndexDelegate{            
                func sendIndex(Int);            
            }
    
            class CustomSwipeView: UIView , UITableViewDataSource , UITableViewDelegate {      
    
                var delegate : SendIndexDelegate? //Step2           
                override init(frame: CGRect) {                
                    super.init(frame: frame)
                    self.addCustomView()                
                }
                 ...... 
    
         func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {            
                var row = indexPath.row            
                //for optional binding            
                if let temp = self.delegate {                
                    delegate?.sendIndex(row) //Step 3               
                }else{                
                    println("optional value contains nill value")                
                }      
            }
        }
    

    Steps Continued for Another Class:

    4) Conform to the protocol SendIndexDelegate(so method sendIndex(Int) must be impelemented by this class)

    5) Assign the value self in variable delegate in the optional variable delegate(it says that i will act as delegate for Class CustomSwipeView and implement the method sendIndex(Int))

    6) Now implement the method and add body to it(because it has been delegate so must handle actions of the above class through call back method)

        class RootViewController: UIViewController,SendIndexDelegate //Step4 {
    
    
                let rect: CGRect = CGRect (x: self.view.frame.size.width, y :10 , width: self.view.frame.size.width-50, height: self.view.frame.size.height-10)
                var a = CustomSwipeView(frame : rect)
                a.delegate = self//step5
                self.myView = a
                self.view.addSubview(self.myView)                
            }
       // Step 6:        
         func sendIndex(row : Int){
    
                switch row {
    
                case 0:                
    
                        let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                        let moneySummaryVC: MoneySummaryVC = storyboard.instantiateViewControllerWithIdentifier("moneyVC") as! MoneySummaryVC
                        self.navigationController?.pushViewController(moneySummaryVC, animated: true)                 
    
                default:
                    println("no index")                
    
                }      
    
            }
    

提交回复
热议问题