UIAlertview由Custom Cell Class // Swift触发

时间:2015-01-11 11:59:14

标签: ios uitableview swift uialertcontroller

我有一个填充了CustomCells的TableViewCell。在customCells中,我有一个按钮,我想触发UIAlert。

以下是CustomCell类中按钮的代码:

@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!

我在调试警报上给了一些resaerch,但找不到快速的答案并且对我有用...; - )

有什么想法吗?

THX // Seb

1 个答案:

答案 0 :(得分:0)

在你的行TableViewController().presentViewController中,TableViewController()实际上创建了一个视图控制器TableViewController的新实例。此实例不是当前显示在屏幕上的实例。这就是为什么你得到视图不属于窗口层次结构的错误的原因。

为了解决此问题,请将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)