在swift 3中显示自定义单元格的警报

时间:2017-05-31 08:15:29

标签: ios swift ipad swift3

我在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文件?

先谢谢

3 个答案:

答案 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初始化,并且总是从它调用它。