簡體   English   中英

iOS在didSelectItemAtIndexPath展開CollectionView

[英]iOS unwind CollectionView at didSelectItemAtIndexPath

因此,我創建了一個應用程序,用戶可以在其中創建自定義鍛煉。 進入第一個視圖后,將添加輪數,而不是單擊表視圖中添加輪數的按鈕。該單擊將打開另一個具有collectionview的活動。

所以問題出在這里,當我點擊一個元素巫婆代表需要進行一輪的練習時,它會向我發送一個空結果。默認情況下,如果我向該字符串添加一個值,它將起作用。

我注意到展開發生在我的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)
    }

這是放松的工作方式:

首先,將IBAction展開(segue:UIStoryboardSegue)放在要返回的vc中(演示者vc,在這種情況下為InsertWorkout)。

其次,轉到情節提要,然后選擇要從其中展開的vc(在這種情況下為集合視圖),然后從導致展開(在本例中的集合視圖為單元)的按鈕/單元格中按ctrl拖動到頂部的退出按鈕。相同的vc,您應該在“ Selection Segue”下看到一個帶有IBAction展開方法名稱的彈出窗口。

第三,在當前vc(在這種情況下為集合vc)中實現prepareforsegue,以將數據傳遞回去。

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!!, 
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM