Ich versuche, eine Balkendiagrammansicht zu erstellen, um Delegat und Datenquelle zu dieser Diagrammansicht zu erstellen. Erstellen eines Protokolls für den Delegaten und die Datenquelle für das DiagrammMöchten Bargraph mit Delegate und Datasource mit Protokoll erstellen
protocol BarGraphDatasource{
func grapgView(grapgView:BarGraph, numberOfItemsInGraph items:Int)->Int
func grapgView(grapgView: BarGraph, didSelectItemAtIndex index: Int)
}
// Bargraph View-Klasse ist wie unten
class BarGraph: UIScrollView {
var delegte: BarGraphDatasource! = nil{
didSet{
self.reloadGraph()
}
}
var barWidth : CGFloat = 24 {
didSet{
self.reloadGraph()
}
}
var minimumSpacing : CGFloat = 10 {
didSet{
self.reloadGraph()
}
}
var numberOfItems : Int = 0 {
didSet{
self.reloadGraph()
}
}
var barColor : UIColor = UIColor.lightGrayColor() {
didSet{
self.reloadGraph()
}
}
init() {
super.init(frame: CGRectZero)
self.reloadGraph()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
func reloadGraph(){
self.setContentSizeForGraph()
}
func setContentSizeForGraph() {
if self.numberOfItems > 0 {
self.contentSize = CGSizeMake((self.barWidth * CGFloat(self.numberOfItems) + self.minimumSpacing), self.frame.height);
var xValue:CGFloat = 0
for i in 1...self.numberOfItems {
xValue = xValue + CGFloat(CGFloat(i) + self.minimumSpacing)
print("xValue: \(xValue)")
let frame = CGRectMake(xValue, 0, self.barWidth, 50)
let barView = UIView(frame: frame)
barView.backgroundColor = self.barColor
self.addSubview(barView)
}
}
}
}
// Das ist meine Klasse Viewcontroller
class ViewController: UIViewController,BarGraphDatasource {
@IBOutlet weak var grapView : BarGraph?
var arrayItems: NSArray = []
override func viewDidLoad() {
super.viewDidLoad()
arrayItems = [1,2,3,4,5]
grapView?.barWidth = 10;
grapView?.delegte = self;
grapView?.reloadGraph()
}
func grapgView(grapgView: BarGraph, numberOfItemsInGraph items: Int) -> Int {
return arrayItems.count // how can i pass this value to the graph view from here *******
}
func grapgView(grapgView: BarGraph, didSelectItemAtIndex index: Int) {
print(arrayItems[index]) // how can i call this method on click of bar view *******
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
// Hier kann ich nicht um die Grafik bekommen und nicht-Protokoll aufrufen Methoden in der ViewController-Klasse
numberOfItemsInGraph, wenn wir dies setzen will ich diesen Wert auf BarGraph in
didSelectItemAtIndex Diagramm übergeben, wie die Aktion ausgewählte Element
Sie sagen: "Wie kann ich diesen Wert an die Graphansicht übergeben". Ist das nicht die "Rückkehr"? Da es sich um eine Delegate-Methode handelt, würde ich erwarten, dass sie von dem Objekt aufgerufen wird, das auf den Delegaten verweist. –