【问题标题】:Programmatically Create and Push View Controller以编程方式创建和推送视图控制器
【发布时间】:2014-09-26 21:16:18
【问题描述】:

我正在使用下面的代码作为附加到按钮的实用方法在按钮触摸上创建和推送视图控制器

 func createSmartController() -> UIViewController{

    //Create controller and get view
                var controller = UIViewController()
                var view = controller.view
                var tag:String
                var count = 0

                //Create and layout scroll view
                var scrollView = UIScrollView()
                scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)
                view.addSubview(scrollView)
                view.addConstraint(NSLayoutConstraint(item: scrollView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0.0))
                view.addConstraint(NSLayoutConstraint(item: scrollView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0.0))
                view.addConstraint(NSLayoutConstraint(item: scrollView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0.0))
                view.addConstraint(NSLayoutConstraint(item: scrollView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0.0))

                //Create and add content view
                var scrollContent = UIView()
                scrollContent.setTranslatesAutoresizingMaskIntoConstraints(false)
                scrollView.addSubview(scrollContent)
                scrollView.addConstraint(NSLayoutConstraint(item: scrollContent, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0.0))
                scrollView.addConstraint(NSLayoutConstraint(item: scrollContent, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 0.0))
                scrollView.addConstraint(NSLayoutConstraint(item: scrollContent, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0.0))
                scrollView.addConstraint(NSLayoutConstraint(item: scrollContent, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0.0))
                view.addConstraint(NSLayoutConstraint(item: scrollContent, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0.0))
                view.addConstraint(NSLayoutConstraint(item: scrollContent, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0.0))

                //Create all buttons
                var buttons = self.GetMyButtons() //Just returns and array of UIButtons

                //Add buttons to view with constraints
                var prevButton:String
                var constH:NSArray
                var constV:NSArray
                var hString:String
                var vString:String
                var index = 0
                for button in buttons{
                    button.setTranslatesAutoresizingMaskIntoConstraints(false)
                    scrollContent.addSubview(button)
                    button.bounds.size.height = 90
                    scrollContent.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: scrollContent, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 0.0))
                    scrollContent.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: scrollContent, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 0.0))
                    if(index == 0){
                        scrollContent.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: scrollContent, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 8.0))
                    }
                    else{
                        scrollContent.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: buttons[index-1], attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 8.0))
                    }
                    if(index == buttons.count-1){
                        scrollContent.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: scrollContent, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: -8.0))
                    }
                    index++
                }
return controller
    }

在下面的调用中使用此方法来生成并推送按钮 touchupinside 上的视图控制器

var controller = button.getSmartController()
            self.navigationController?.pushViewController(controller, animated: true)

但是,我被推送的视图控制器似乎根本没有视图。它是黑色/空白。推送动画似乎也有一点小问题。

【问题讨论】:

  • 我在这里没有看到任何objective-c。标签错误?
  • @CrimsonChris 我接受 swift 和 objective-c 来处理我的大部分 ios 内容,因为翻译很简单。
  • 您正在寻求帮助调试 Swift 代码。请不要为此使用objective-c标签。
  • @CrimsonChris 我会接受任何一种语言的帮助。
  • 您的 createSmartController 函数没有返回值。

标签: ios uiviewcontroller swift uinavigationcontroller


【解决方案1】:

所有背景颜色都不存在并显示为黑色。以编程方式创建元素时,还必须添加样式,否则所有默认值都将返回为 null/black。

【讨论】:

  • 您找到轻微卡顿的原因了吗?我也有。
猜你喜欢
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多