2015-10-13 2 views
0

Итак, я создал приложение, в котором пользователи создают пользовательские тренировки. Вы вводите первое представление, добавляете x количество раундов, чем вы нажимаете на кнопку в таблице, где вы добавляете rounds.That щелчок открывает другое действие с помощью коллекции.iOS unind CollectionView at didSelectItemAtIndexPath

Так что проблема здесь, когда я нажимаю на элемент, который представляет упражнение, которое должно быть в раунде, оно посылает мне пустой результат. По умолчанию, если я добавляю значение к этой строке, это работает.

Я заметил, что размотки происходит перед моим didSelectItemAtIndexPath

import UIKit 

class InsertWorkout: UIViewController{ 

    @IBOutlet var InsertRoundTable: UITableView! 

    @IBOutlet weak var txtName: UITextField! 


    var RoundNumber : NSMutableArray = ["Round 1"] 
    var RoundLabel : NSMutableArray = [""] 
    var RoundExercise : NSMutableArray = ["add-1"] 
    var RoundExerciseImages : NSMutableArray = ["providno"] 

    var RoundNumber_Count=1 
    var RoundNumber_Add_Counter=1 

    var studentData : StudentInfo! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

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


    } 

    //MARK: UIButton Action methods 

    @IBAction func btnBackClicked(sender: AnyObject) 
    { 
     self.navigationController?.popViewControllerAnimated(true) 
    } 

    @IBAction func btnSaveClicked(sender: AnyObject) 
    { 
     if(txtName.text == "") 
     { 
      Util.invokeAlertMethod("", strBody: "Please enter workout name.", delegate: nil) 
     } 
     else 
     { 
       let studentInfo: StudentInfo = StudentInfo() 

       studentInfo.workout_name = txtName.text! 

       studentInfo.workout_benefit_1=" CUSTOM " 
       studentInfo.workout_benefit_2=" WORKOUT " 
       studentInfo.workout_benefit_3="" 
       studentInfo.workout_requiremnets="arsutech.com" 
       studentInfo.workout_time="4min" 

       let isInserted = ModelManager.getInstance().addWorkoutData(studentInfo) 
       if isInserted { 
        Util.invokeAlertMethod("", strBody: "Workout added", delegate: nil) 
       } else { 
        Util.invokeAlertMethod("", strBody: "Error while adding workout.", delegate: nil) 
       } 

      self.navigationController?.popViewControllerAnimated(true) 
     } 
    } 


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     self.view.endEditing(true) 
     InsertRoundTable.endEditing(true) 
    } 


    //UITableView 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     // #warning Potentially incomplete method implementation. 
     // Return the number of sections. 
     return 1 
    } 
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // #warning Incomplete method implementation. 
     // Return the number of rows in the section. 
     return RoundNumber.count 

    } 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    { 
     var cell : InsertRoundCell! = tableView.dequeueReusableCellWithIdentifier("InsertRoundCell") as! InsertRoundCell 
     if(cell == nil) 
     { 
      cell = NSBundle.mainBundle().loadNibNamed("InsertRoundCell", owner: self, options: nil)[0] as! InsertRoundCell; 
     } 
     let exerviseName = RoundNumber[indexPath.row] 
     let exerciseLabels = RoundLabel[indexPath.row] 
     let exerciseImage = RoundExercise[indexPath.row] 
     let exerciseImage_Holder = RoundExerciseImages[indexPath.row] 


     cell.insert_label_Round.text = exerviseName as? String 
     cell.addWorkout_Label.text = exerciseLabels as? String 
     cell.addExercise_Holder?.image = UIImage(named: exerciseImage_Holder as! String) as UIImage? 

     cell.addWorkoutBut.setBackgroundImage(UIImage(named: exerciseImage as! String) as UIImage?, forState: UIControlState.Normal) 

     cell.addWorkoutBut.tag = indexPath.row 
     cell.addWorkoutBut.addTarget(self, action: "logAction:", forControlEvents: .TouchUpInside) 

     cell.selectionStyle = UITableViewCellSelectionStyle.None 
     return cell as InsertRoundCell 

    } 


    @IBAction func logAction(sender: UIButton){ 
     //self.RoundNumber.replaceObjectAtIndex(sender.tag, withObject: "Ezel") 
     //let titleString = self.RoundNumber[sender.tag] as? String 
     //Util.invokeAlertMethod("", strBody: titleString!, delegate: nil) 
     self.InsertRoundTable.reloadData() 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
     let destinationVC = segue.destinationViewController as! ChoseExercise 
     destinationVC.id=sender.tag 
     RoundNumber_Count=sender.tag 
    } 

    @IBAction func unwinndChoseExercise(segue:UIStoryboardSegue){ 


     if let svc = segue.sourceViewController as? ChoseExercise{ 
      self.RoundLabel.replaceObjectAtIndex(RoundNumber_Count, withObject: "\(svc.exercise_label)") 
      self.RoundExercise.replaceObjectAtIndex(RoundNumber_Count, withObject: "providno") 
      self.RoundExerciseImages.replaceObjectAtIndex(RoundNumber_Count, withObject: "\(svc.exercise_image)") 
      self.InsertRoundTable.reloadData() 
     } 
    } 


    //Add Round 
    @IBAction func addRound(sender: AnyObject) { 
     if(RoundNumber_Add_Counter<12){ 
      RoundNumber_Add_Counter++ 
      self.RoundNumber.addObject("Round \(RoundNumber_Add_Counter)") 
      self.RoundLabel.addObject("") 
      self.RoundExercise.addObject("add-1") 
      self.RoundExerciseImages.addObject("providno") 
      self.InsertRoundTable.reloadData() 

     }else{ 
     Util.invokeAlertMethod("", strBody: "This is the maximum number of rounds", delegate: nil) 
     } 

    } 
} 




    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

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

    } 



    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return self.exercisesNames.count 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cellexercises_insert", forIndexPath: indexPath) as! Insert_ExerciseCollectionViewCell 

     cell.insert_exerciseImage?.image = self.exercisesImages[indexPath.row] 
     cell.insert_exerciseLabel?.text = self.exercisesNames[indexPath.row] 
     cell.insert_exercisesHardnessImg?.image = self.exercisesHardnessImg[indexPath.row] 

     return cell 
    } 

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
     exercise_label="\(exercisesNames[indexPath.row])" 
     exercise_image="\(exercises_Exervise_Row_Names[indexPath.row])" 
     dismissViewControllerAnimated(true, completion: nil) 
    } 

ответ

0

Вот как размотки работы:

Во-первых, положить IBAction раскрутку (SEGUE: UIStoryboardSegue) в ВХ, где вы собираетесь идти назад (презентатор vc, InsertWorkout в этом случае).

Во-вторых, перейдите в раскадровку и выберите vc, где вы будете расслабляться (в этом случае просмотреть коллекцию) и ctrl-drag от кнопки/ячейки, которая приводит к отключению (ячейке просмотра коллекции в вашем случае) до выхода на верхней части этого же vc, и вы увидите всплывающее окно с вашим именем метода IBAction для разматывания в разделе «Выбор Segue».

В-третьих, реализуйте готовый метод в текущем vc (сборка vc в этом случае), чтобы передать ваши данные обратно.

class InsertWorkout 
{ 
    IBAction func unwind(segue:UIStoryboardSegue) { 
     //use the data passed from prepare to update your ui or you can also communicate to the sender using segue.sourceVC 
    } 
} 
class CollectionVC 
{ 
    override func prepareForSegue(segue: UIStoryboadSegue, sender: AnyObject?){ 
     if segue.identifier == "whatever you put in storyboard for segue id" { 
      if let inserWorkoutVC = segue.destinationViewController as? InsertWorkout { 
       //pass the data here but don't attempt to update your destination's view ui!!, 
      } 
     } 
    } 
} 
+0

мне нужно отправить через кнопку мыши информацию Ид и я столкнулся с проблемой, когда я использую performSegueWithIdentifier с отправкой, что data.Its вида confuzing –

+0

вы сделали правильное соединение в раскадровке – Lukas

+0

я имею в виду с ваша кнопка к значку выхода – Lukas