Нажмите UIViewController с предупреждением без UINavigationController - PullRequest
0 голосов
/ 02 мая 2018

У меня есть кнопка в UITableViewController. когда я нажимаю эту кнопку, контроллер оповещения спрашивает, хочет ли пользователь перейти на страницу корзины или остаться на той же странице, как показано ниже,

 if user?.uid != nil{
        let title = "Item is added to your cart "
        let alert = AlertController.instance(title: title)
        present(alert, animated: true, completion: nil)
    } else{
       // Alert asks user to register..
    }

AlertController находится в другом классе, и я создал его с пользовательской анимацией. Я хочу, чтобы когда пользователь нажимал кнопку (перейти на страницу корзины), страница корзины отображалась так, как если бы она была (показывать, «нажимать») в качестве перехода. Вот как я программно выдвинул контроллер представления в классе контроллера предупреждений.

@IBAction func showCartButton(_ sender: Any) {
    //---> go to cart page ...
   print("cart button pressed")
    //-----> this code is working fine with other UIviewcontrollers (however it is 'not working in UItableviewcontroller)
    let storyBoard : UIStoryboard = UIStoryboard(name: "Cart", bundle:nil)
    let CartViewController = storyBoard.instantiateViewController(withIdentifier: "CartPage")
    navigationController?.pushViewController(CartViewController, animated: true)
      //-----> this code shows the cart page without the navigation and tabs.. 
  //        let storyBoard : UIStoryboard = UIStoryboard(name: "Cart", bundle:nil)
 //        let CartViewController = storyBoard.instantiateViewController(withIdentifier: "CartPage")
 //        self.present(CartViewController, animated:true, completion:nil)
} 

Контроллер push-представления не работает с контроллером Alert, я не уверен, что это так, потому что я использовал навигацию с предупреждением, и если так, есть ли способ, которым я могу нажать контроллер вида ??

Это весь класс AlertController, который я создал в отдельной раскадровке и поместил в качестве контроллера начального вида.

 import UIKit

 class AlertController: UIViewController{


@IBOutlet weak fileprivate var AddProductToCartLabel: UILabel!
@IBOutlet weak fileprivate var cartButton: UIButton!
@IBOutlet weak fileprivate var shoppingButton: UIButton!
@IBOutlet weak fileprivate var container: UIView!
var text = String()

override func viewDidLoad() {

    setContainer()
    setCartButton()
    setShoppingButton()


}

override func viewDidLayoutSubviews() {
    layoutContainer()
}

@IBAction func cancel(_ sender: Any) {
    dismiss(animated: true, completion: nil)
}

@IBAction func showCartButton(_ sender: Any) {
    //---> go to cart page ...
   print("cart button pressed")

    let storyBoard : UIStoryboard = UIStoryboard(name: "Cart", bundle:nil)
    let CartViewController = storyBoard.instantiateViewController(withIdentifier: "CartPage")
    navigationController?.pushViewController(CartViewController, animated: true)

     //        let storyBoard : UIStoryboard = UIStoryboard(name: "Cart", bundle:nil)
    //        let CartViewController = storyBoard.instantiateViewController(withIdentifier: "CartPage")
    //        self.present(CartViewController, animated:true, completion:nil)
}

  @IBAction func completeShopButton(_ sender: Any) {
    dismiss(animated: true, completion: nil)
  }
 }

fileprivate extension  AlertController{
// to set the view above
func setContainer() {
    let shape = CAShapeLayer()
    shape.fillColor = UIColor.white.cgColor
    container.backgroundColor = UIColor.clear
    container.layer.insertSublayer(shape, at: 0)
 }
func setCartButton(){
    cartButton.clipsToBounds = true
    //cartButton.layer.cornerRadius = 10
}
func setShoppingButton(){
    shoppingButton.clipsToBounds = true
    shoppingButton.layer.borderColor = UIColor.darkGray.cgColor
    shoppingButton.layer.borderWidth = 1
    //shoppingButton.layer.cornerRadius = 10
  }

 }
  fileprivate extension  AlertController{
  // design the size of the container
  func layoutContainer() {
   let path = UIBezierPath(roundedRect: container.bounds, cornerRadius: 10)
   let layer = container.layer.sublayers?.first as! CAShapeLayer
   layer.path = path.cgPath
 }
}
  extension AlertController{
  static func instance(title: String?) -> AlertController{
      let storyboard = UIStoryboard(name: String(describing: self), bundle: Bundle(for: self))
      let controller = storyboard.instantiateInitialViewController() as! AlertController
      controller.text = title!
      return controller
  }
 }

1 Ответ

0 голосов
/ 03 мая 2018

Проблема в том, что когда вы пытаетесь нажать CartViewController, нет навигационного контроллера, чтобы включить его.

Вы представляете AlertController модально, а затем попробуйте сделать: navigationController?.pushViewController(CartViewController, animated: true). Если вы установите здесь точку останова и напечатаете navigationController, я ожидаю, что это ноль.

Я предлагаю вам AlertController делегировать обратно на UITableViewController, который находится внутри контроллера навигации, и заставить контроллер просмотра таблиц перейти к следующему экрану. Вы также можете представить AlertController в виде навигации, но это кажется ненужным.

...