【问题标题】:swift showing a hidden container view快速显示隐藏的容器视图
【发布时间】:2015-05-01 04:15:00
【问题描述】:

我有一个这样的容器视图:

主程序称为 ConfigViewContainer,子程序称为 ConfigDistrictViewController,上面有一个 UIPicker。 如果我没有在情节提要 ConfigDistrictViewController 中设置为隐藏,那么它会显示。

现在我想在 ConfigViewController 文本字段控件中执行触地事件时通过代码显示它。

var configDistrictViewController: ConfigDistrictViewController?
var uiView : UIView?

@IBAction func selectDistrictTouchDown(sender: AnyObject) {
    self.performSegueWithIdentifier("ConfigDistrictSelectionSegue", sender: self)

}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if(segue.identifier == "ConfigDistrictViewController")
    {
        configDistrictViewController = segue.destinationViewController as? ConfigDistrictViewController

        configDistrictViewController?.showContainer()

        // Also tried the following      
        uiView = configDistrictViewController?.view
        uiView?.hidden = false


    }
}

这是 ConfigDistrictViewController 中的代码:

func showContainer()
{
    println("showContainer")
    self.view.hidden = true
}

但我得到的只是这样的错误:

失败发生在这里:

        configDistrictViewController = segue.destinationViewController as? ConfigDistrictViewController

所以我想我可能会使用:

self.performSegueWithIdentifier("ConfigDistrictSelectionSegue", sender: self)

不正确

【问题讨论】:

    标签: ios iphone swift


    【解决方案1】:

    ConfigViewContainer 被实例化时,它的子ConfigDistrictViewController 也被实例化,所以segue 已经被执行了。您可以通过实现shouldPerformSegueWithIdentifier: 来阻止执行segue(当ConfigViewContainer 被实例化时),而不是隐藏视图控制器。并返回错误。当您在代码中调用performSegueWithIdentifier 时不会调用该方法,因此您应该可以执行此类操作,

    -(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
        if ([identifier isEqualToString:@"Embed"]) { // The embed segue in IB was given this identifier. This method is not called when calling performSegueWithIdentifier:sender: in code (as in the button method below)
            return NO;
        }else{
            return  YES;
        }
    }
    
    
    - (IBAction)showEmbed:(UIButton *)sender {
    
        [self performSegueWithIdentifier:@"Embed" sender:self];
    }
    

    我从以前的项目中获取了这段代码。如果你需要我把它翻译成 Swift,我可以。

    【讨论】:

    • 感谢您的解释。现在有道理了。我能够将其转换为 swift。
    猜你喜欢
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2015-04-16
    • 2021-10-06
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多