我在listViewCell.swift和listViewCell.xib中设计了自定义单元格。其中我有文字字段。当用户输入超过100的数字时,我想显示警报。 我在HomeViewController中有tableView。
let alert = UIAlertController(title: "Error", message: "Please Insert value less than 100", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))
UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true, completion: nil)
然后它给了我Attempt to present <UIAlertController: 0x7f945a5a67d0> on <ProjName.LoginController: 0x7f945a407e70> whose view is not in the window hierarchy!
当我将代码更改为
时let alert = UIAlertController(title: "Error", message: "Please Insert value less than 100", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))
HomeViewController().present(alert, animated: true, completion: nil)
然后它给了我unexpectedly found nil while unwrapping an Optional value
并指出
`override func viewDidLoad(){
super.viewDidLoad()
**tableViewList.delegate = self**
tableViewList.dataSource = self
searchBar.delegate = self`
如何显示来自自定义单元格的提醒?或者我们如何在HomeViewController中创建一个公共警报功能并将其显示为任何swift文件?
先谢谢
答案 0 :(得分:1)
您可以选择自定义单元格的代理人。设置自定义单元格的代理,假设为didEnterInvalidValue
didEnterValidValue
,代表HomeViewController
。从这些代理实施中,向您的UIAlertController
显示自定义消息。
或者您可以遍历self.navigationController?.viewControllers
以查找顶部视图控制器并在该视图控制器的视图上显示UIAlertController
。
答案 1 :(得分:0)
最简单的是
第1步:
在您使用自定义Cell的View控制器中,为textField创建一个公共委托函数,其目的是通知您有关文本长度的信息。 您可能需要为此扩展UITextFieldDelegate。
或者你可以为你的textField分配目标函数(不确定它是否有效)
如何捕获特定TextField?
您需要使用indexPath为每个textField分配一个标记,并使用该标记捕获该特定的textField。
第2步:
在该功能中,您只需使用
即可显示提醒self.present(alert, animated: true, completion: nil)
答案 2 :(得分:0)
我会去代表回答。但是对于更快的解决方案,我在几个项目中从AppDelegate的rootViewController(通常是UINavigationController)创建一个单例,这样它就可以随时获取rootController。使用keyWindow,不太推荐,因为keyWindow并不总是由谁控制的,例如,警告对话框重新定义它。
我创建一个AlertClass单一的另一个项目,它由rootController初始化,并且总是从它调用它。