2017-08-07 3 views
0

Ich habe eine TableViewCell, die einige Funktionen für jede Zelle in einer Tabellenansicht enthält. Ich möchte, dass eine dieser Funktionen der Ansicht eine activityIndicator präsentiert, um Benutzerinteraktion mit der App zu verhindern, bis die Funktion beendet ist.Wie verwendet man TableViewCell, um ViewController hinzuzufügen?

var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() 
func exampleFunc(){ 
     activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0,y: 0,width: 50,height: 50)) 
     activityIndicator.center = self.view.center //can't be used as self.view doesn't exist because self is a tableviewCell 
     activityIndicator.hidesWhenStopped = true 
     activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray 
     view.addSubview(activityIndicator) //also can't be used 
     activityIndicator.startAnimating() 
     UIApplication.shared.beginIgnoringInteractionEvents() 
     if x<y{ 
      self.activityIndicator.stopAnimating() 
      UIApplication.shared.endIgnoringInteractionEvents() 
     } 

    } 

Das Problem dabei ist, dass die self.view.center nicht verwendet werden kann, da diese Funktion in der tableViewCell untergebracht ist, und deshalb wird self Bezugnahme auf die tableViewCell und so ein self.view ist nicht verwendbar: In der Regel kann dies durch Verwendung erfolgen. Wie kann ich dieses Aktivitätskennzeichen zu dem TableView hinzufügen, das die TableViewCell enthält, obwohl es sich in dem tableViewCell befindet?

+1

Warum legen Sie den Code für die Anzeige des Aktivitätsindikators in der Zelle und nicht in der Tabellenansicht selbst? – NRitH

+0

Sie können die Benachrichtigung oder Delegierung verwenden, während Sie den Aktivitätsindikator im viewController beibehalten und die Benachrichtigung aus tableViewCell –

+0

@NRitH veröffentlichen, da die Funktionen für alle Schaltflächen in jeder Zelle in der Zelle enthalten sind ... und diese Schaltflächen sind I möchte den Aktivitätsindikator verwenden –

Antwort

1

Erstellen eines Protokolls, wie zB:

protocol MyTableViewCellDelegate { 
    func showActivityIndicator() 
} 

Dann in Ihrem UITableViewCell einen Verweis auf eine MyTableViewCellDelegate erstellen:

var delegate: MyTableViewCellDelegate? 

Dann wird Ihr Controller auf Ihr neues Protokoll, ex konform machen:

Legen Sie den Delegaten Ihrer Zellen als Ihren Controller fest. Dann, wenn Ihre Zelle einen ActivityIndicator anzeigen muss, müssen Sie nur anrufen:

delegate?.showActivityIndicator() 
Verwandte Themen