2015-11-26 15 views
8

Ich habe eine Ansicht aufgebaut, die von unten erscheint und sich nach einiger Zeit verbirgt und es funktioniert gut, aber ich möchte es in UIView Klasse als Modal machen, ich schaute über das Internet, aber ich konnte nicht t bekommen oder verstehen, wie man das macht.Custom UIView Klasse - Swift

snake = UIView(frame: CGRect(x: 0 , y: self.view.frame.size.height-66, width: self.view.frame.size.width, height: 66)) 
snake.backgroundColor = UIColor(red: 50/255, green: 50/255, blue: 50/255, alpha: 1.0) 


let label = UILabel(frame: CGRect(x: 12, y: 8, width: snake.frame.size.width-90, height: 50)) 
label.text = "Connection error please try again later!!" 
label.textColor = UIColor.whiteColor() 
label.numberOfLines = 0 
label.font = UIFont.systemFontOfSize(14) 
snake.addSubview(label) 

let button = UIButton(frame: CGRect(x: snake.frame.size.width-87, y: 8, width: 86, height: 50)) 
button.setTitle("OK", forState: UIControlState.Normal) 
button.setTitleColor(UIColor(red: 76/255, green: 175/255, blue: 80/255, alpha: 1.0), forState: UIControlState.Normal) 
button.addTarget(self, action: "hideSnackBar:", forControlEvents: UIControlEvents.TouchUpInside) 
snake.addSubview(button) 
self.view.addSubview(snake) 

Wie mit dieser Klasse starten ich keine Ahnung habe, ich mit seinem Rahmen die Ansicht programmatisch erschaffe und ich brauche Eigenschaften für die Schaltfläche zum Beispiel setzen oder das Etikett und erstellen Sie die Ansicht aus jeder Klasse.

class snake: UIView { 


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

    } 

    convenience init() { 
     self.init(frame:CGRect.zero) 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("This class does not support NSCoding") 
    } 

} 

Antwort

13

Code:

var label:UILabel! 
var button:UIButton! 

override init (frame : CGRect) { 
    super.init(frame : frame) 
    self.backgroundColor = UIColor(red: 50/255, green: 50/255, blue: 50/255, alpha: 1.0) 


    label = UILabel(frame: CGRect(x: 12, y: 8, width: self.frame.size.width-90, height: 50)) 
    label.text = "Connection error please try again later!!" 
    label.textColor = UIColor.whiteColor() 
    label.numberOfLines = 0 
    label.font = UIFont.systemFontOfSize(14) 
    self.addSubview(label) 

    button = UIButton(frame: CGRect(x: self.frame.size.width-87, y: 8, width: 86, height: 50)) 
    button.setTitle("OK", forState: UIControlState.Normal) 
    button.setTitleColor(UIColor(red: 76/255, green: 175/255, blue: 80/255, alpha: 1.0), forState: UIControlState.Normal) 
    button.addTarget(self, action: "hideSnackBar:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.addSubview(button) 
} 

und verwenden es:

let snakeView = snake(frame: CGRectMake(0 ,self.view.frame.size.height-66, self.view.frame.size.width, 66))) 

und stellen Daten für snakeview:

snakeView.label.text = "hello" 

Aber in der Regel Ich werde eine Funktion erstellen, aktualisieren Daten für Ansicht:

func updateData(title:String){ 
    self.label.text = title 
} 

und es nennen, wenn Bedarf:

snake.updateData("hello") 

P/s: Wenn Sie xib verwenden, müssen Sie awakeFromNib statt init zu implementieren. Und schaffen Schlange mit xib (erinnern Set Identifier für xib: „snakeView“):

let snakeView = NSBundle.mainBundle().loadNibNamed("snakeView", owner: nil, options: nil)[0] as snakeView 
+0

Nun groß, aber eine Frage, wenn ich eine Eigenschaft für das Label festlegen müssen, wenn ich brauche, um die Ansicht zu verwenden, wie ist Es ist möglich ? Ich brauche einen Setter, aber darfst du mir ein Beispiel zeigen? –

+0

Ich aktualisiert in meinem Beitrag –

+0

@Nguyen Hoan anstelle einer Klasse, wie würde diesen Code in eine Struktur schieben? –