从 CustomCell 触发的 UIAlert 视图 Class // Swift
UIAlert view triggered from CustomCell Class // Swift
我有一个填充了 CustomCell 的 TableViewCell。在 customCells 中,我有一个要触发 UIAlert 的按钮。
这是我在 CustomCell Class 中的按钮代码:
@IBAction func anzahlButton(sender: UIButton) {
let alert = UIAlertController(title: "Bitte gib Deine gewünschte Anzahl an:", message: nil, preferredStyle: .Alert)
alert.addTextFieldWithConfigurationHandler {
(tf:UITextField!) in
tf.keyboardType = .NumberPad
tf.addTarget(self, action: "textChanged:", forControlEvents: .EditingChanged)
}
func handler(act:UIAlertAction!) {
let tf = alert.textFields![0] as UITextField
let addItem = "\(tf.text)"
var fixedToDoItems = ""
anzahlText.setTitle("\(addItem)", forState: .Normal)
//println("User entered \(addItem), tapped \(act.title)")
}
alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: handler))
(alert.actions[1] as UIAlertAction).enabled = false
TableViewController().presentViewController(alert, animated: true, completion: nil)
}
当我按下按钮时,我收到此警报:Warning: Attempt to present <UIAlertController: 0x7fc7f0cbc5c0> on <MyApp.TableViewController: 0x7fc7f0c965f0> whose view is not in the window hierarchy!
我对调试警报进行了一些研究,但找不到 swift 中对我有用的答案... ;-)
有什么想法吗?
谢谢
//塞布
在您的行 TableViewController().presentViewController
中,TableViewController() 实际上创建了一个新的视图控制器实例 TableViewController
。此实例不是当前显示在屏幕上的实例。这就是为什么您会收到错误消息,即视图不是 window 层次结构的一部分。
为了解决这个问题,将 func anzahlButton(sender: UIButton)
移动到 TableViewController
文件,然后通过 cellForRowAtIndexPath
函数将其连接到按钮。删除 @IBAction
部分,因为我们不再通过界面构建器连接按钮。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
// Your Code
cell.button.addTarget(self, action: "anzahlButton:", forControlEvents: UIControlEvents.TouchUpInside)
}
然后换行
TableViewController().presentViewController(alert, animated: true, completion: nil)
到
self.presentViewController(alert, animated: true, completion: nil)
我有一个填充了 CustomCell 的 TableViewCell。在 customCells 中,我有一个要触发 UIAlert 的按钮。
这是我在 CustomCell Class 中的按钮代码:
@IBAction func anzahlButton(sender: UIButton) {
let alert = UIAlertController(title: "Bitte gib Deine gewünschte Anzahl an:", message: nil, preferredStyle: .Alert)
alert.addTextFieldWithConfigurationHandler {
(tf:UITextField!) in
tf.keyboardType = .NumberPad
tf.addTarget(self, action: "textChanged:", forControlEvents: .EditingChanged)
}
func handler(act:UIAlertAction!) {
let tf = alert.textFields![0] as UITextField
let addItem = "\(tf.text)"
var fixedToDoItems = ""
anzahlText.setTitle("\(addItem)", forState: .Normal)
//println("User entered \(addItem), tapped \(act.title)")
}
alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: handler))
(alert.actions[1] as UIAlertAction).enabled = false
TableViewController().presentViewController(alert, animated: true, completion: nil)
}
当我按下按钮时,我收到此警报:Warning: Attempt to present <UIAlertController: 0x7fc7f0cbc5c0> on <MyApp.TableViewController: 0x7fc7f0c965f0> whose view is not in the window hierarchy!
我对调试警报进行了一些研究,但找不到 swift 中对我有用的答案... ;-)
有什么想法吗?
谢谢 //塞布
在您的行 TableViewController().presentViewController
中,TableViewController() 实际上创建了一个新的视图控制器实例 TableViewController
。此实例不是当前显示在屏幕上的实例。这就是为什么您会收到错误消息,即视图不是 window 层次结构的一部分。
为了解决这个问题,将 func anzahlButton(sender: UIButton)
移动到 TableViewController
文件,然后通过 cellForRowAtIndexPath
函数将其连接到按钮。删除 @IBAction
部分,因为我们不再通过界面构建器连接按钮。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
// Your Code
cell.button.addTarget(self, action: "anzahlButton:", forControlEvents: UIControlEvents.TouchUpInside)
}
然后换行
TableViewController().presentViewController(alert, animated: true, completion: nil)
到
self.presentViewController(alert, animated: true, completion: nil)