2017-10-15 4 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

ここにコードがあります。任意のスタックビューに背景色を追加できます。 あなたは詳細についてなどの

+0

}

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) } 

などを確認し、次のスレッドをstackviewする色を追加することができます。 https://stackoverflow.com/questions/34868344/how-to-change-the-background-color-of-uistackview – ahmed

関連する問題