При первом нажатии кнопки название кнопки изменится с « Добавить в корзину » на « Перейти в корзину ». И при следующем щелчке по кнопке осуществляется переход к следующему экрану (странице корзины) [как на флипкарте].

Вот мой кусок кода:

    @IBAction func addToCartbtnTapped(_ sender: Any) {
        if let info = detailInfo {
            let cartData = CartStruct(cartItems: info, cartQuantity: 1)
            self.saveCart(data: cartData)
            showAlert()
            (sender as AnyObject).setTitle("Go to Cart", for: .normal)
            
            let cart = self.storyboard?.instantiateViewController(withIdentifier: "CartViewController") as? CartViewController
            self.navigationController?.pushViewController(cart!, animated: true)
        }
    }

Я могу изменить название кнопки. Но всякий раз, когда я нажимаю кнопку в течение n-го числа раз, продукт добавляется в корзину, а экран не перемещается.

Как решить эту проблему?

Обновить..

    override func viewDidLoad() {
        super.viewDidLoad()
        UserDefaults.standard.string(forKey: "btn")
    }



    @IBAction func addToCartbtnTapped(_ sender: Any) {
        if !Clicked {
            if let info = detailInfo {
                let cartData = CartStruct(cartItems: info, cartQuantity: 1)
                self.saveCart(data: cartData)
                showAlert()
                addingTOCart.setTitle("Go to Cart", for: .normal)
                UserDefaults.standard.set("Go to Cart", forKey: "btn")
                print("Clicked")
                Clicked = true
                return
            }
        }
        
        if Clicked {
            print("Perform Action")
            let cart = self.storyboard?.instantiateViewController(withIdentifier: "CartViewController") as? CartViewController
            self.navigationController?.pushViewController(cart!, animated: true)
        }
    }

Вот как я пытаюсь сохранить состояние « Перейти в корзину ». Но не работает .. предложите пожалуйста!

0
Ahana Chakraborty 15 Сен 2021 в 16:16

3 ответа

Лучший ответ

Добавьте этот код, чтобы проверить, что корзина уже добавлена ​​или нет. Если добавлено, измените заголовок в соответствии с вашим детальным контроллером:

 override func viewWillAppear(_ animated: Bool) {
            if let info = detailInfo {
                let buttonTItle = (self.checkCartData(cartInfo: info) ? "Go to Cart"  : "Add to Cart")
                addToCartButton.setTitle(buttonTItle, for: .normal)
            }
        }

Затем проверьте перед добавлением в корзину. Если он уже добавлен, перейдет на страницу корзины, иначе добавит новый элемент корзины (также изменив заголовок кнопки).

@IBAction func addToCartbtnTapped(_ sender: Any) {
            if let info = detailInfo {
                if checkCartData(cartInfo: info) {
                    let cart = self.storyboard?.instantiateViewController(withIdentifier: "CartViewController") as? CartViewController
                    self.navigationController?.pushViewController(cart!, animated: true)
                } else {
                    let cartData = CartStruct(cartItems: info, cartQuantity: 1)
                    self.saveCart(data: cartData)
                    showAlert()
                    (sender as AnyObject).setTitle("Go to Cart", for: .normal)
                }
            }
        }

Проверьте данные корзины здесь:

        func checkCartData(cartInfo: jsonstruct) -> Bool {
            guard let cart = self.getCartData() else { return false }
            return (cart.contains(where: { $0.cartItems.name == cartInfo.name }) ? true : false )
        }

Получите все данные корзины с помощью этого метода:

        func getCartData() -> [CartStruct]? {
            let defaults = UserDefaults.standard
            var tempCart: [CartStruct]?
            if let cdata = defaults.data(forKey: "cartt") {
                tempCart = try! PropertyListDecoder().decode([CartStruct].self, from: cdata)
            }
            return tempCart
        }
0
Abdul Hoque Nuri 16 Сен 2021 в 05:32

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

@IBAction func addToCartbtnTapped(_ sender: UIButton) {
        if let info = detailInfo {
            switch sender.currentTitle! {
            case "Add to Cart":
                let cartData = CartStruct(cartItems: info, cartQuantity: 1)
                self.saveCart(data: cartData)
                showAlert()
                (sender as AnyObject).setTitle("Go to Cart", for: .normal)
            case "Go to Cart":
                let cartData = CartStruct(cartItems: info, cartQuantity: 1)
                self.saveCart(data: cartData)
                showAlert()
                (sender as AnyObject).setTitle("Go to Cart", for: .normal)
            default:
                print("Default Case")
            }
        }
    }
0
Diksha Rattan 15 Сен 2021 в 17:12
import UIKit

class ViewController: UIViewController {

   @IBOutlet weak var btn: UIButton!
   var Clicked:Bool = false
   override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view.
   }

   @IBAction func btnClick(_ sender: Any) {
       if !Clicked {
           btn.setTitle("Click", for: .normal)
           print("Clicked")
           Clicked = true
           return
       }
       
       if Clicked {
           print("Perform Action")
       }
       
   }

}

-1
Noor Ahmed Natali 16 Сен 2021 в 04:27