我想基于警报选择更改选项卡中的选项卡(警告-确定要离开此页面。案例-是-根据所选的选项卡来更改视图。案例-否-不执行任何操作。停留在同一页面(标签栏索引)。
我尝试使用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(在上述情况下为崩溃)。解决该问题的另一种方法是,在单击选项卡时,只有在用户确认要退出当前页面(通过警报操作)后,视图才应更改。
答案 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
}