1

我有两个类CustomSwipOut,它们是UIView的子类和UIViewController的ViewController子类。委托的回调方法没有在ViewController 类中从 CustomSwipeOut中定义的表视图的didSelectRowAtIndexPath委托方法中触发。我在 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")


                    }


        }


    }
4

1 回答 1

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

            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)
            var a = CustomSwipeOut(frame : rect)
            a.delegate = self
            self.myView = a
            self.view.addSubview(self.myView)

            //optional chaining




        }
于 2015-03-17T10:46:50.307 回答