2016-06-05 9 views
1

Ich habe die tableview.delegate = self ... vom Donut auf delegieren und Datenquelle ... eingestellt. Kümmerte mich um das Protokoll und alles andere ABER wenn ich eine Zelle auswählen, tut es nicht ' Ich werde angerufen. Ich habe einen Haltepunkt und in einem Druck setzen, aber nichts passiertDidSelectRowAtIndexPath wird überhaupt nicht aufgerufen

enter image description here Import UIKit

class StartCompetitionViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource { 



@IBOutlet weak var mainStackView: UIStackView! 

@IBOutlet weak var pickThemeLabel: UILabel! 

@IBOutlet weak var themeTextField: UITextField! 
@IBOutlet weak var tableView: UITableView! 

@IBOutlet weak var middleStackView: UIStackView! 
@IBOutlet weak var logoStackView: UIStackView! 
@IBOutlet weak var buttonStackView: UIStackView! 

@IBOutlet weak var leftOrTopButton: UIButton! 
@IBOutlet weak var rightOrBottomButton: UIButton! 


var autoComplete = [String]() 

override func viewDidLoad() { 
    super.viewDidLoad() 




    leftOrTopButton.landingPageButtonsRound() 
    leftOrTopButton.setTitle("Back", forState: .Normal) 
    leftOrTopButton.backgroundColor = UIColor(red: 239.0/255.0, green: 77.0/255.0, blue: 77.0/255.0, alpha: 1.0) 

    rightOrBottomButton.landingPageButtonsRound() 
    rightOrBottomButton.setTitle("Next", forState: .Normal) 
    rightOrBottomButton.backgroundColor = UIColor(red: 249.0/255.0, green: 214.0/255.0, blue: 0.0/155.0, alpha: 1.0) 

    pickThemeLabel.backgroundColor = UIColor(red: 25.0/255.0, green: 25.0/255.0, blue: 25.0/255.0, alpha: 1.0) 
    pickThemeLabel.text = "Pick a Theme" 
    pickThemeLabel.textColor = UIColor.whiteColor() 


    view.backgroundColor = UIColor(red: 25.0/255.0, green: 25.0/255.0, blue: 25.0/255.0, alpha: 1.0) 


    themeTextField.keyboardAppearance = .Dark 
    themeTextField.autocorrectionType = .No 



    leftOrTopButton.setTitle("Back", forState: .Normal) 

    rightOrBottomButton.setTitle("Next", forState: .Normal) 

    slowFadeInMiddleInformation() 


    themeTextField.delegate = self 
    themeTextField.backgroundColor = UIColor.whiteColor() 

// tableView.delegate = self

self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None 



    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(StartCompetitionViewController.keyboardWillShow(_:)), name:UIKeyboardWillShowNotification, object: nil); 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(StartCompetitionViewController.keyboardWillHide(_:)), name:UIKeyboardWillHideNotification, object: nil); 


    hideKeyboardWhenTappedAround() 


} 


@objc func keyboardWillShow(sender: NSNotification) { 

    view.frame.origin.y = -170 

} 
@objc func keyboardWillHide(sender: NSNotification) { 

    view.frame.origin.y = 0 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


func textFieldShouldEndEditing(textField: UITextField) -> Bool { 

    self.themeTextField.resignFirstResponder() 

    return true 
} 

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    self.view.endEditing(true) 
    return false 
} 

func slowFadeInMiddleInformation(){ 

    self.middleStackView.alpha = 0.0 

    UIView.animateWithDuration(0.5, 
           delay: 0.0, 
           options: .CurveLinear, 
           animations: { 


           self.middleStackView.alpha = 1.0 




     }, completion: nil) 

} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell 

    let index = indexPath.row as Int 

    cell.textLabel!.text = autoComplete[index] 



    cell.textLabel!.font = UIFont(name:"Helvetica", size: 24) 
    cell.textLabel?.textAlignment = .Center 
    cell.backgroundColor = UIColor(red: 25.0/255.0, green: 25.0/255.0, blue: 25.0/255.0, alpha: 1.0) 
    cell.textLabel?.textColor = UIColor.whiteColor() 


    return cell 

} 

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    let substring = (textField.text!.lowercaseString as NSString).stringByReplacingCharactersInRange(range, withString: string) 

    substring.lowercaseString 

    searchAutocompleteEntriesWithSubstring(substring.lowercaseString) 


    if textField == themeTextField{ 
     _ = range.length == 0 ? textField.text! + string : (themeTextField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string) 



    } 

    return true 

} 


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return autoComplete.count 

} 

func searchAutocompleteEntriesWithSubstring(substring: String) { 

    autoComplete.removeAll(keepCapacity: false) 

    for key in LocalModal().possibleThemesArray { 

     let myString: NSString! = key.lowercaseString as NSString 

     let substringRange :NSRange! = myString.rangeOfString(substring) 

     if (substringRange.location == 0) { 
      autoComplete.append(key) 
     } 

    } 

    tableView.reloadData() 

} 




func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 


    let selectedCell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)! 

    themeTextField.text = selectedCell.textLabel!.text! 

    autoComplete.removeAll(keepCapacity: false) 

    tableView.reloadData() 

    print("foo") 
} 



func animateEverythingBack(){ 

    UIView.animateWithDuration(1.5, 
           delay: 0.0, 
           options: .CurveLinear, 
           animations: { 



           self.middleStackView.center.y += self.view.bounds.width 


           self.buttonStackView.center.y += self.view.bounds.width 






     }, completion: nil) 

} 

func fadeOutOfMiddleStackView(){ 

    UIView.animateWithDuration(0.5, 
           delay: 0.0, 
           options: .CurveLinear, 
           animations: { 

           self.middleStackView.alpha = 0.0 

     }, completion: nil) 

} 



@IBAction func leftOrTopButtonTapped(sender: UIButton) { 


    animateEverythingBack() 
    fadeOutOfMiddleStackView() 

    delay(1.6) { 
     self.performSegueWithIdentifier("fromStartToLanding", sender: self) 
    } 



} 

@IBAction func bottomOrRightButtonTapped(sender: UIButton) { 

    self.performSegueWithIdentifier("fromStartToWillJoin", sender: self) 

} 

}

+0

1) entferne den tableView.delegate = self im Code (wenn du ihn im Storyboard verkabelt hast, wird das nicht benötigt). 2) Stellen Sie sicher, dass Sie die Protokolle UITableViewDatasSource und UITableViewDelegate im ViewContorller deklarieren. Entweder in der Hauptdeklaration oder als Erweiterungen (bevorzugt). – DJohnson

+0

@DJohnson danke, ich entfernte die unnötige tableView.delegate = selbst und ich habe die Protokolle und es reagiert immer noch nicht – RubberDucky4444

+0

Können Sie den gesamten View-Controller-Code und einen Screenshot der Delegierten Verkabelung im Storyboard? Das Problem wird wahrscheinlich in einem dieser 2 Orte sein. – DJohnson

Antwort

2

Ich zog Ihr Code in XCode (in einem leeren Projekt).

Ich habe alle Zeilen auskommentiert, die nicht mit dem TableView zu tun hatten.
Ich legte eine Tabelle in den View-Controller, zugewiesen den Delegaten und Datenquelle gab der Prototyp-Zelle den Bezeichner von "Zelle" und es funktioniert, was bedeutet, dass die Tabellenansicht gezeichnet wird, und wenn ich eine Zeile auswählt, feuert die didSelectRowAtIndexPath.

Sie gesendet gab einen Screenshot der ViewController-Steckdosen, aber das Problem liegt wahrscheinlich in den TableView-Steckdosen. Entfernen Sie alle und fügen Sie nur dataSource und Delegate zurück (für Debugging-Zwecke)

Auch der Code in CellForRowAtIndexPath und didSelect ... Sie sind Werte zuweisen, die es keinen Bezug auf (vorausgesetzt, Sie verwenden die Prototyp UITableViewCell und keine benutzerdefinierte Zelle?) Zum Testen, ich würde alles in cellForRow ... auskommentieren, außer die Zelle queueing, und die Zelle zurück, und in der didSelect .... lassen Sie einfach print ("foo") für jetzt .

Außerdem gab ich AutoComplete nur einen Wert von 5 Datensätze, ich hätte 5 Zeilen. Ich gehe davon aus, dass Sie Zeilen bekommen, also ist die Autovervollständigung nicht das Problem.

Lassen Sie mich wissen, ob dies hilft. Gerne weiter helfen, wenn nötig.

+0

Ich löschte die Tabellenansicht und fügte eine neue und eine neue Zelle ... kommentierte alles, was Sie sagten, ich bekomme immer noch nichts .... die eine Sache, die ich tun kann, ist Scrollen die Liste rauf und runter ... so funktioniert die Tabellenansicht einfach nicht die select – RubberDucky4444

+0

Wenn du das ganze Projekt auf github posten willst oder mir schicken schaue ich es mir gerne an. – DJohnson

+0

Ich hatte einen Durchbruch .... ich als in der Lage, eine nach dem Klicken eine große Anzahl von Zeiten zu wählen ... und versuchte Doppelklick .... macht das Licht? – RubberDucky4444