So erstellen Sie einen benutzerdefinierten Delegaten mit einer Delegate-Methode für eine benutzerdefinierte Ansicht mit seiner (benutzerdefinierte Ansicht) -Objekt als Argument in dieser Delegate-Methode genau wie TableView CellForRowAtIndexPath: Methode?Wie erstellt man eine benutzerdefinierte Delegate-Methode wie die cellForRowAtIndexPath-Methode von tableView, die ein Argument von tableView darstellt?
Ausarbeitung der Frage mit dem genauen Problem:
Bis jetzt habe ich immer die Delegatmethoden unterschiedlicher Ansichten in UIKit vorgesehen verwendet habe Ansichten in meiner Anwendung zu konstruieren. Aber dieses Mal muss ich eine benutzerdefinierte Ansicht erstellen, aber mit dem benutzerdefinierten Delegaten und der Datenquelle. Ich habe es schon geschafft. Aber eine Frage hebt sich immer. Das heißt, wann immer ich mehrere gleiche benutzerdefinierte Ansichten in meinem ViewController brauche, wie erkenne ich sie getrennt in meinen Delegate-Methoden. Definitiv muss ich das Objekt der benutzerdefinierten Ansicht in meiner Delegate-Methode als Argument übergeben. Für z.
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath;
In über Delegatmethode ist Tableview Objekt ein Argument, das wir die Tableview erkennen können, wenn es mehr Tableviews auf einem Viewcontroller und dieser View-Controller wird als Delegierter all diese Tableviews gesetzt.
Das ist das eigentliche Szenario:
//
// ViewController.swift
// DemoCustomViewDelegate
//
// Created by Shubham Ojha on 4/3/16.
// Copyright © 2016 Shubham Ojha. All rights reserved.
//
import UIKit
protocol MyCustomViewDelegate {
func myCustomView(myCustomView: MyCustomView, didSomethingWithAString aString: String)
}
class MyCustomView: UIView {
var delegate: AnyObject?
init(frame: CGRect, andViewId viewId: String, andDelegate delegate: AnyObject) {
super.init(frame: frame)
self.delegate = delegate
self.doSomethingWithAString(viewId)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
func doSomethingWithAString(aString: String) {
// do something with a string
delegate!.myCustomView(self, didSomethingWithAString: aString)
}
}
class ViewController: UIViewController {
var myView: MyCustomView!
override func viewDidLoad() {
super.viewDidLoad()
myView = MyCustomView.init(frame: CGRectMake(0, 0, 50, 50), andViewId: "100", andDelegate: self)
//set the delegate
myView.delegate = self
}
func myCustomView(myCustomView: MyCustomView, didSomethingWithAString aString: String) {
//this delegate method is called but the object of myCustomView I need could not get
if(myCustomView.isEqual(myView)){
print("Got the object")//**Does not prints, this is what I actually need to print...**
}
}
}
Sie können den Code in Ihren Viewcontroller copy-paste und das Problem bewerten.
Antworten in Swift sind auch willkommen!
In - (UITableViewCell *) Tabellenansicht: (UITableView *) Tabellenansicht cellForRowAtIndexPath: (NSIndexPath *) indexPath; Methode Das TableView-Objekt wird im ViewController erstellt, aber hier wird das myCustomView-Objekt innerhalb der MyCustomView-Klasse übergeben. –
Ich verstehe nicht, was Sie mit Ihrem Kommentar meinen :) –
Ich möchte dieses MyCustomView-Objekt von diesem ViewController initialisiert werden, die MyCustomViewDelegate entspricht, wie im Fall von TableView –