基于警报选择的Swift TabbarViewController操作。 shouldSelect和didSelect没有帮助

时间:2019-06-01 11:03:58

标签: ios swift tabbar

我想基于警报选择更改选项卡中的选项卡(警告-确定要离开此页面。案例-是-根据所选的选项卡来更改视图。案例-否-不执行任何操作。停留在同一页面(标签栏索引)。

我尝试使用tabbarcontrollerdelegate方法didselect和应该选择,但无法正常工作。

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Categories
 *
 * @ORM\Table(name="categories")
 * @ORM\Entity
 */
class Categories
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=50, nullable=false)
     */
    private $nom;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getNom(): ?string
    {
        return $this->nom;
    }

    public function setNom(string $nom): self
    {
        $this->nom = $nom;

        return $this;
    }
}

此代码不起作用,因为在进入警报选择之前,didselect返回bool(在上述情况下为崩溃)。解决该问题的另一种方法是,在单击选项卡时,只有在用户确认要退出当前页面(通过警报操作)后,视图才应更改。

1 个答案:

答案 0 :(得分:0)

shouldSelect viewController方法中,检查viewController是否为目标视图控制器。如果未返回true,则返回false

如果No选择了警报,则什么也不做。如果选择了Yes,请在tabBarController

中将目标视图控制器分配为selectedViewController
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    if viewController is DestinationViewController {            
        let alert = UIAlertController(title: "You are in middle of a Quiz", message: "Do you want to end the Quiz in between !",         preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "No", style: .default))
        alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: { action in
            tabBarController.selectedViewController = viewController
        }))
        self.present(alert, animated: true, completion: nil)
        return false
    }
    return true
}