2016-05-03 15 views
2

In meinem Projekt habe ich die linke Ansicht und die rechte Ansicht erstellt, es zeigt dynamisch zwei verschiedene Ansichten, Linke Seite erstellen FirstView und die FirstView innerhalb zeigen Titel, Kommentare, Bild und Video. Und auch RightView-Seite erstellen secondView innerhalb Show Titel, Kommentare, Bild und Video. Bild und Video zeigen nur einige der Ansichten. Das Design ist komplett programmatisch erstellt, mein Design unten gegeben wird,UIButton Aktion ruft Swift nicht auf?

enter image description here

Mein Problem Play-Taste (UIButton) Aktion nicht aufgerufen wird, warum?

Ich weiß nicht, ist meinen Code unten geben, UIButton Name: btnPlay, Aktion Name: buttonAction:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var scrollViewBase: UIScrollView! 
    var leftView = UIView() 
    var rightView = UIView() 

    var wholeYLeft = CGFloat() 
    var wholeYRight = CGFloat() 
    let btnPlay = UIButton() 

    var myArrayOfDict: NSArray = [ 
     ["Title": "MacBook", "Text": "Our goal with MacBook was to do the impossible: engineer a full-sized experience into the lightest and most compact Mac notebook ever. That meant reimagining every element to make it not only lighter and thinner but also better.", "Image":"MacBook1","video":""], 
     ["Title": "OS X", "Text": "OS X is the operating system that makes it possible to do all the things you do on a Mac.", "Image":"","video":""], 
     ["Title": "MacBook Pro", "Text": "Now with the force Touch trackpad,longer battery life and faster flash storage", "Image":"MacBookPro1","video":""], 
     ["Title": "Mac Mini", "Text": "Mac mini is an affordable powerhouse that packs the entire Mac experience into a 19.7cm-square frame. Just connect your own display, keyboard and mouse, and you’re ready to make big things happen.", "Image":"Mini","video":""], 
     ["Title": "iMac", "Text": "The idea behind iMac has never wavered: to craft the ultimate desktop experience. The best display, paired with high-performance processors, graphics and storage ", "Image":"","video":""], 
     ["Title": "MacBook Air", "Text": "The 11-inch MacBook Air lasts up to 9 hours between charges and the 13-inch model lasts up to an incredible 12 hours. So from your morning coffee till your evening commute, you can work unplugged.", "Image":"VideoThumn","video":"Official Apple MacBook Air Video YouTube.mp4"] 
    ] 


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

     self.title = "Dynamic Cell" 


     leftView.frame = CGRectMake(0, 0, self.view.frame.width/2, self.view.frame.height) 
     rightView.frame = CGRectMake(self.view.frame.width/2, 0, self.view.frame.width/2, self.view.frame.height) 

//  leftView.backgroundColor = UIColor.lightGrayColor() 
//  rightView.backgroundColor = UIColor.grayColor() 

     self.scrollViewBase.addSubview(leftView) 
     self.scrollViewBase.addSubview(rightView) 

     self.callViewMethod() 
    } 

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

    func callViewMethod() { 

     var yFloatLeft : CGFloat! = 5 

     var yFloatRight : CGFloat! = 5 

     wholeYLeft = 0 
     wholeYRight = 0 

     for var i = 0; i < myArrayOfDict.count; i++ { 

      let isCheckImage = myArrayOfDict[i].valueForKey("Image") as! String 
      let isCheckVideo = myArrayOfDict[i].valueForKey("video") as! String 

      let str = myArrayOfDict[i].valueForKey("Text") as? String 

      let boundingRectHeight = str!.boundingRectWithSize(CGSizeMake(self.leftView.frame.width-10, CGFloat.max), 
       options:NSStringDrawingOptions.UsesLineFragmentOrigin, 
       attributes: [NSFontAttributeName: UIFont(name: "Arial", size: 14.0)!], context:nil).size.height + 60.0 


      if(i%2 == 0) { 
       let firstView = UIView() 
       print(yFloatLeft) 
       if(isCheckImage == "") { 
        firstView.frame = CGRectMake(5, yFloatLeft, self.leftView.frame.width-10, 30 + boundingRectHeight) 
       } else { 
        firstView.frame = CGRectMake(5, yFloatLeft, self.leftView.frame.width-10, 180 + boundingRectHeight) 
       } 

//    firstView.backgroundColor = UIColor.redColor() 
       firstView.layer.borderWidth = 2.0 
       firstView.layer.borderColor = UIColor.lightGrayColor().CGColor 
       leftView.addSubview(firstView) 

       let lblTitle = UILabel() 
       lblTitle.frame = CGRectMake(0, 0, self.leftView.frame.width-10, 30) 
       lblTitle.textAlignment = NSTextAlignment.Center 
       lblTitle.text = myArrayOfDict[i].valueForKey("Title") as? String 

       let lblText = lblInset() 
       lblText.frame = CGRectMake(0, 30, self.leftView.frame.width-10, boundingRectHeight) 
       lblText.text = myArrayOfDict[i].valueForKey("Text") as? String 
       lblText.numberOfLines = 0 
       lblText.lineBreakMode = .ByWordWrapping 
       lblText.font = UIFont(name: "Arial", size: 16) 
       lblText.textAlignment = NSTextAlignment.Justified 

       let mainImageView = UIImageView() 

       if(isCheckImage == "") { 
        mainImageView.hidden = true 
        yFloatLeft = yFloatLeft + 30 + boundingRectHeight + 10 

       } else { 
        mainImageView.hidden = false 
        mainImageView.frame = CGRectMake(0, 30 + boundingRectHeight, self.leftView.frame.width-10, 150) 
        mainImageView.image = UIImage(named: (myArrayOfDict[i].valueForKey("Image") as? String)!) 

        if(isCheckVideo == "") { 
         btnPlay.hidden = true 
        } else { 
         btnPlay.hidden = false 
         btnPlay.frame = CGRectMake((mainImageView.frame.width/2)-10, (mainImageView.frame.height/2)-10, 30, 30) 
         btnPlay.backgroundColor = UIColor.blackColor() 
         btnPlay.userInteractionEnabled = true 
         btnPlay.addTarget(self, action: "buttonAction:", forControlEvents: .TouchUpInside) 
         btnPlay.setImage(UIImage(named: "Play"), forState: .Normal) 
         mainImageView.addSubview(btnPlay) 

        } 
        yFloatLeft = yFloatLeft + 30 + boundingRectHeight + 160 
       } 


       firstView.addSubview(lblTitle) 
       firstView.addSubview(lblText) 
       firstView.addSubview(mainImageView) 
       firstView.bringSubviewToFront(btnPlay) 

      } else { 
       let secondView = UIView() 
       if(isCheckImage == "") { 
        secondView.frame = CGRectMake(5, yFloatRight, self.rightView.frame.width-10, 30 + boundingRectHeight) 
       } else { 
        secondView.frame = CGRectMake(5, yFloatRight, self.rightView.frame.width-10, 180 + boundingRectHeight) 
       } 

//    secondView.backgroundColor = UIColor.purpleColor() 
       secondView.layer.borderWidth = 2.0 
       secondView.layer.borderColor = UIColor.lightGrayColor().CGColor 
       rightView.addSubview(secondView) 

       let lblTitle = UILabel() 
       lblTitle.frame = CGRectMake(0, 0, self.leftView.frame.width-10, 30) 
       lblTitle.textAlignment = NSTextAlignment.Center 
       lblTitle.text = myArrayOfDict[i].valueForKey("Title") as? String 

       let lblText = lblInset() 
       lblText.frame = CGRectMake(0, 30, self.leftView.frame.width-10, boundingRectHeight) 
       lblText.text = myArrayOfDict[i].valueForKey("Text") as? String 
       lblText.numberOfLines = 0 
       lblText.lineBreakMode = .ByWordWrapping 
       lblText.font = UIFont(name: "Arial", size: 16) 
       lblText.textAlignment = NSTextAlignment.Justified 

       let mainImageView = UIImageView() 

       if(isCheckImage == "") { 
        mainImageView.hidden = true 
        yFloatRight = yFloatRight + 30 + boundingRectHeight + 10 

       } else { 
        mainImageView.hidden = false 
        mainImageView.frame = CGRectMake(0, 30 + boundingRectHeight, self.leftView.frame.width-10, 150) 
        mainImageView.image = UIImage(named: (myArrayOfDict[i].valueForKey("Image") as? String)!) 

        if(isCheckVideo == "") { 
         btnPlay.hidden = true 
        } else { 
         btnPlay.hidden = false 
         btnPlay.frame = CGRectMake((mainImageView.frame.width/2)-10, (mainImageView.frame.height/2)-10, 30, 30) 
         btnPlay.userInteractionEnabled = true 
         btnPlay.backgroundColor = UIColor.blackColor() 
         btnPlay.setImage(UIImage(named: "Play"), forState: .Normal) 
         btnPlay.addTarget(self, action: Selector("buttonAction:"), forControlEvents: .TouchUpInside) 
         mainImageView.addSubview(btnPlay) 
        } 


        yFloatRight = yFloatRight + 30 + boundingRectHeight + 160 
       } 


       secondView.addSubview(lblTitle) 
       secondView.addSubview(lblText) 
       secondView.addSubview(mainImageView) 
       secondView.bringSubviewToFront(btnPlay) 

      } 

      wholeYLeft = yFloatLeft 
      wholeYRight = yFloatRight 
     } 
     print(wholeYLeft) 
     print(wholeYRight) 
     leftView.frame = CGRectMake(0, 0, self.view.frame.width/2, wholeYLeft) 
     rightView.frame = CGRectMake(self.view.frame.width/2, 0, self.view.frame.width/2, wholeYRight) 

     if(wholeYRight > wholeYLeft) { 
      self.scrollViewBase.contentSize = CGSize(width:self.view.frame.width, height: wholeYRight) 
     } else { 
      self.scrollViewBase.contentSize = CGSize(width:self.view.frame.width, height: wholeYLeft) 
     } 

    } 

    func buttonAction(sender:UIButton!) { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let controller = storyboard.instantiateViewControllerWithIdentifier("PlayViewController") as! PlayViewController 

     controller.lblTitle.text = myArrayOfDict[5].valueForKey("Title") as? String 
     controller.lblComments.text = myArrayOfDict[5].valueForKey("Text") as? String 

     self.presentViewController(controller, animated: true, completion: nil) 
    } 
} 
+0

Ich mache etwas ähnliches. Was ist lblInset in deinem Code? – nadi9

+0

seine benutzerdefinierte Klasse für 'UILabel' –

+0

groß. Vielen Dank für Ihre Hilfe – nadi9

Antwort

1

I ist eine Antwort bekam, In UIButton (btnPlay) hinzufügen subview UIImageView geben, mein Problem ist, mainImageView.addSubview(btnPlay), so ändern die Subview UIView statt UIImageView richtigen Code ist

secondView.addSubview(btnPlay) 
secondView.bringSubviewToFront(btnPlay) 

seine für mich arbeiten

0

Sie haben für dynamisch erstellte Imageview, Interaktion mit dem Benutzer zu ermöglichen, so schreiben eine weitere Zeile nach,

let mainImageView = UIImageView() 
mainImageView.userInteractionEnabled = true 

Hoffe, das wird funktionieren.

+0

Ich habe bereits 'userInteractionEnabled' angegeben aber es heißt nicht –

+0

Ok. Aber du hast es UIButton gegeben. Dies ist für Bildansicht –

0

Sie müssen Tag die Taste dann nur kann es erkennen, welche Taste dass

btnPlay.tag = 1