2016-12-28 46 views
-1

是否可以从我以前的项目访问视图控制器?从Swift 3中的另一个项目访问视图控制器

我想实现的是以编程方式将我以前的项目的视图控制器用于我的新项目。 In Swift 3.

+0

可能重复的[Swift:如何打开一个新的应用程序,当uibutton被挖掘](http://stackoverflow.com/questions/33932303/swift-how-to-open-a-new-app-when-uibutton -is-tapped) –

回答

0

您可以使用Framework目标来包含几乎所有您想要的常见代码,包括UIViews。

在你的框架:

open func commonView() - UIView { 
    // code to create view or call up xib file from framework 
} 

在您的应用程序:

import MyFramework 

class MainViewController:UIViewController { 
    override viewDidLoad() { 
     self.view = commonView() 
    } 
} 

但是,如果你希望它是一个UIViewController?我不太确定可以轻松工作。也许如果你让它在应用程序中成为一个VC的孩子,就会分裂出VC的观点和逻辑。在这种情况下,你可能会更喜欢@Lion给你的更多手动解决方案。

如果你有兴趣,here's更详细的描述了从我几个星期前回答的问题来设置框架目标。

编辑基于评论,这里有一点可能有所帮助。首先,请记住我的原始答案包括最终的链接,以帮助您在Xcode中进行设置。另外,重要的事情 - 也许是最重要的 - 是正确设计事物!

假设您希望通用代码添加一组看起来相同的按钮,并且可以连接到特定应用程序中的特定功能。

首先,由于平台,认识到你可以做什么,不可以做什么。你有Cocoa(基金会)和Cocoa Touch(UIKit)。换句话说,你有一个NSButton和一个UIButton。我知道你无法简单地创建一个返回“按钮”的框架。 (但是一个框架可以返回一个核心图像过滤器输出,因为这是平台不可知的。)

限制事物到UIKit,让我们来讨论故事板和视图控制器。我发现后者很混乱。 “视图”和“视图控制器”之间有很大的区别。昨天我因为这个问题对一个问题做了几处编辑。 UIViews是UIKit中几乎任何控件的基地。 UIViewControllers包含了处理视图的逻辑。 (顺便说一句,这是MVC 101.)

故事板是Xcode特有的东西,因此,我不是一个很好的“可重用”的来源,你可以使它们。它们可能是你可以做的事 - 毕竟它们是Xcode使用的特定XML格式。

虽然您可能无法在框架调用中使用UIViewController作为返回(至少不是很容易),但您可以使用任何UIView及其子类。你猜怎么着? UIButton就是这样的事情。

Swift向框架介绍了很多东西。扩展和便捷初始化器是两个特性。比方说,你要把它放到一个框架:

extension UIButton { 
    convenience public init(
     title:String, 
     titleColor:UIColor, 
     titleFontSize:CGFloat, 
     image:UIImage, 
     titleEdgeInsets:UIEdgeInsets, 
     imageEdgeInsets:UIEdgeInsets, 
     tintColor:UIColor, 
     backgroundColor:UIColor, 
     borderColor:CGColor, 
     borderWidth:CGFloat, 
     cornerRadius:CGFloat 
     ) { 
     self.init(type: .system) 
     self.setTitle(title, for: .normal) 
     self.setTitleColor(titleColor, for: .normal) 
     self.titleLabel?.font = UIFont.systemFont(ofSize: titleFontSize) 
     self.setImage(image, for: .normal) 
     self.titleEdgeInsets = titleEdgeInsets 
     self.imageEdgeInsets = imageEdgeInsets 
     self.tintColor = tintColor 
     self.backgroundColor = backgroundColor 
     self.layer.borderColor = borderColor 
     self.layer.borderWidth = borderWidth 
     self.layer.cornerRadius = cornerRadius 
     self.translatesAutoresizingMaskIntoConstraints = false 
    } 
} 

如果您结合起来,与此:

公共FUNC returnImage(_命名为:字符串) - > {的UIImage让 = myBundle Bundle.init(标识符: “com.company.framework”) let imagePath =(myBundle?.path(forResource:“images”,ofType:“bundle”))! +“/”+命名为 let theImage = UIImage(contentsOfFile:imagePath) return theImage! }

[替换“com.company.name”与您的框架ID,而“图像”与您包的名称]

而当你输入你可以做到这一点在你的应用程序,只要你的框架:

let openCamera = UIButton(
    title:    "Camera", 
    titleColor:   UIColor.yellow, 
    titleFontSize:  15, 
    image:    returnImage("Camera"), 
    titleEdgeInsets: UIEdgeInsets(top: 0, left: -51, bottom: -49, right: 0), 
    imageEdgeInsets: UIEdgeInsets(top: 0, left: 0, bottom: 23, right: -51), 
    tintColor:   UIColor.yellow, 
    backgroundColor: UIColorFromRGB(0x1F1F1F), 
    borderColor:  UIColor.yellow.cgColor, 
    borderWidth:  2, 
    cornerRadius:  10) 

我仍然在学习Swift和框架的细微之处...... optionals等。但你也可以做到这一点在你的框架:

public class ToolBoardCloseButton: UIButton { 
    convenience init(
     tag  :Int, 
     target :Any, 
     action :Selector 
     ) 
    { 
     self.init(frame: CGRect.zero) 
     self.backgroundColor = sgRed 
     self.setTitle("Close", for: .normal) 
     self.tintColor = UIColor.white 
     self.layer.cornerRadius = 5 
     self.layer.borderColor = UIColor.white.cgColor 
     self.layer.borderWidth = 1 
     self.tag = tag 
     self.addTarget(target, action: action, for: .touchUpInside) 
    } 
} 

而这样就意味着这在你的应用程序:

closeButton = ToolBoardCloseButton(tag: tag, target: target, action: hideAction) 

当然,如果你有这样的控制,使你的目标和行动可选(如果你需要,我没有)。这样 - 只要你为它编码 - 你可以让他们在你的通话中可选。

最后一张纸条。在我的框架中,“hideAction”后面的UI逻辑作为ToolBoard类的一部分,它是UIView的一个子类。我所有的应用程序在视图控制器是(1)实例化工具栏,工具栏按钮和板(及其大小),(2)创建关闭按钮和调用框架关闭它,留下(3)特定于应用程序的代码。虽然您可能找不到将UIViewController移动到框架调用中的方法,但您应该能够将所有常见代码和视图合并为一个。

+0

你有用swift 3制作框架的视频教程吗?框架内部有一个快速文件和故事板,功能类似于点击按钮。随着iOS项目的实施。如果你能把你的教程链接到我,那将是非常棒的。 :) – ibmot

+0

不,我是一个老学校的编码器。 :-)自1984年以来,我一直在编程计算机,知道几种语言(几乎停留在大型机和微软平台上),并且自2005年以来只涉足Xcode。我编写了一个不同的“MVC”平台,直到Xcode 4。使用可重复使用的代码是相同的,无论您使用哪种IDE(本例中为Xcode),也不管使用什么平台(本例中为UIKit或Foundation)和语言(Swift)。实现中总是存在一些差异, 。我会对我的答案做一个简短的更新,这可能会有所帮助。 – dfd

1

这是不可能的,您可以从当前项目打开另一个项目的viewcontroller。为此,您必须将该特定的viewcontroller添加到您的项目中!您可以复制和粘贴viewcontroller,它的课程很容易从一个项目到另一个!是的,你可以从你的应用程序打开另一个已安装的应用程序(但这不是你想要的,因为我从你的问题中了解到)!

相关问题