2017-10-15 156 views
0

我创建一个输入表单,它是每个输入行(标签和文本字段)使用堆栈视图进行排列。我试图添加一个白色的背景颜色到特定的堆栈视图。我已经实现了它,但努力将其作为一个函数或类来创建,以便更轻松地控制哪些堆栈视图获得背景。函数或类添加子视图到堆栈视图来设置背景颜色

将此转换为我可以在整个项目中使用的函数或类的任何提示? (注:目前的解决方案,不仅增加了背景颜色到最后的堆栈意见,而不是所有的..没有固定的尚未..)

import UIKit 
import Firebase 

class createActivityVC: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // runs the functions to add backgrounds to the stackviews 

    pinBackground(backgroundView, to: nameStackView) 
    pinBackground(backgroundView, to: typeStackView) 
    pinBackground(backgroundView, to: weaponStackView) 
    pinBackground(backgroundView, to: killStackView) 
    pinBackground(backgroundView, to: sightingsStackView) 
    pinBackground(backgroundView, to: noteStackView) 

    // Do any additional setup after loading the view. 
} 

// Outlets used to set bacground color 
@IBOutlet weak var nameStackView: UIStackView! 
@IBOutlet weak var typeStackView: UIStackView! 
@IBOutlet weak var weaponStackView: UIStackView! 
@IBOutlet weak var killStackView: UIStackView! 
@IBOutlet weak var sightingsStackView: UIStackView! 
@IBOutlet weak var noteStackView: UIStackView! 

// Normal outlets 
@IBOutlet weak var name: UITextField! // required 
@IBOutlet weak var type: UITextField! // required - type of hunt 
@IBOutlet weak var weapon: UITextField! // required - weapon name 
@IBOutlet weak var kills: UITextField! // optional (eg. 1) 
@IBOutlet weak var sightings: UITextField! // optional (eg. 2) 
@IBOutlet weak var note: UITextField! // optional short description of the hunt 

@IBOutlet weak var saveBtn: UIButton! 
@IBOutlet weak var cancelBtn: UIButton! 



@IBAction func saveBtnWasPressed(_ sender: Any) { 
    if name.text != nil && type.text != nil && weapon.text != nil { 
     saveBtn.isEnabled = false // disabled the btn while uploading data - this ensure that user can't send the form twice 

     DataService.instance.uploadPost(uid: (Auth.auth().currentUser?.uid)!, name: name.text!, type: type.text!, weapon: weapon.text!, kills: kills.text!, sightings: sightings.text!, note: note.text!, withGroupKey: nil, sendComplete: { 
      (isComplete) in 
     if isComplete { 
      self.saveBtn.isEnabled = true 
      self.dismiss(animated: true, completion: nil) 

     } else { 
      self.saveBtn.isEnabled = true 
      print("There was an error with uploading the activity") 
     } 

     }) 


    } 

} 
@IBAction func cancelBtnWasPressed(_ sender: Any) { 
    self.dismiss(animated: true, completion: nil) 
} 


private lazy var backgroundView: UIView = { 
    let view = UIView() 
    view.backgroundColor = .white 
    return view 
}() 

private func pinBackground(_ view: UIView, to stackView: UIStackView) { 
    view.translatesAutoresizingMaskIntoConstraints = false 
    stackView.insertSubview(view, at: 0) 
    view.pin(to: stackView) 
} 

} 

public extension UIView { 
public func pin(to view: UIView) { 
    NSLayoutConstraint.activate([ 
     leadingAnchor.constraint(equalTo: view.leadingAnchor), 
     trailingAnchor.constraint(equalTo: view.trailingAnchor), 
     topAnchor.constraint(equalTo: view.topAnchor), 
     bottomAnchor.constraint(equalTo: view.bottomAnchor) 
     ]) 
} 
} 

这是现在的样子.. screenshot

回答

0

这是代码。你可以添加背景颜色到任何stackview。 您可以添加颜色以stackview等作为

typeStackView.addBackground(color:.white) 



extension UIStackView { 

func addBackground(color: UIColor) { 
    let subView = UIView(frame: bounds) 
    subView.backgroundColor = color 
    subView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    insertSubview(subView, at: 0) 
} 

}

+0

检查以下螺纹的更多细节。 https://stackoverflow.com/questions/34868344/how-to-change-the-background-color-of-uistackview – ahmed

相关问题