Метод обратного вызова, не вызывающий из UIView в ViewController в Swift

У меня есть два класса CustomSwipOut, которые являются подклассами UIView и ViewController подклассами UIViewController. . Метод обратного вызова делегата не срабатывает в классе ViewController из метода делегата didSelectRowAtIndexPath табличного представления, определенного в >CustomSwipeOut. Я сделал дополнительную привязку в классе ViewController как var a = CustomSwipeOut(); a.delegate = ViewController()

protocol SendIndexDelegate{

    func sendIndex(Int);

}

    class CustomSwipeOut: UIView , UITableViewDataSource , UITableViewDelegate {


         var label: UILabel = UILabel()
         var myNames = ["item1","item2","item3"]
         var delegate : SendIndexDelegate?


        override init()
        {
            super.init()

        }

        override init(frame: CGRect) {
            super.init(frame: frame)
            self.addCustomView()

        }


        required init(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }


        func addCustomView()
        {
           //add blank subview to the view
            var blankView : UIView = UIView(frame: CGRectMake(0, 0, 300, 100))
            blankView.backgroundColor = UIColor.greenColor()
            self.addSubview(blankView)


            //creating a tableview programmatically
            var tblView : UITableView = UITableView()
            tblView.frame = CGRectMake(0, 100, 300, 200)
            self.addSubview(tblView)
            tblView.delegate = self
            tblView.dataSource = self
            tblView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "myCell")

        }


        //pragma mark- table view data source methods
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


            var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("myCell") as UITableViewCell
            cell.textLabel?.text = self.myNames[indexPath.row]
            return cell

        }

        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

            return self.myNames.count

        }

        //pragma mark - table view delegate methods

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

            var row = indexPath.row
            if let temp = self.delegate {

    delegate?.sendIndex(row)

    }else{

        println("optional value contains nill value")




        }

    }

//Класс ViewController

    class ViewController: UIViewController , SendIndexDelegate {

        var myView :UIView = UIView()


        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.

            var a = CustomSwipeOut()
            a.delegate = ViewController()

            let rect: CGRect = CGRect (x: self.view.frame.size.width, y :50 , width:                                                 self.view.frame.size.width-100, height: self.view.frame.size.height-100)
            self.myView = CustomSwipeOut(frame : rect )
            self.view.addSubview(self.myView)

            //optional chaining


        }

        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }


        @IBAction func showSideMenu() {

            UIView.animateWithDuration(0.2, animations:{

                self.myView.frame = CGRectMake(100,                                                                             50,self.view.frame.size.width-100,self.view.frame.size.height-100)

            } )

        }

        //delegate method
        func sendIndex(row : Int)
        {
                    switch row {

                    case 0:


                        println("index o clicked")
                        let storyboard = UIStoryboard(name: "Main", bundle: nil)
                        let vc = storyboard.instantiateViewControllerWithIdentifier("MoneySum") as UIViewController
                        self.presentViewController(vc, animated: true, completion: nil)



                        println("index 2 clicked")

                        ...

                    default:
                        println("no index")


                    }


        }


    }

person Anish Parajuli 웃    schedule 17.03.2015    source источник


Ответы (1)


person    schedule
comment
Спасибо !!! На самом деле я не смог получить доступ к делегату. В чем была моя проблема?? - person Anish Parajuli 웃; 17.03.2015