2016-12-28 11 views
-1

以前のプロジェクトからビューコントローラにアクセスできますか?Swift 3の別のプロジェクトからView Controllerにアクセス

私が達成したいのは、私の以前のプロジェクトのビューコントローラを私の新しいプロジェクトにプログラムで使用することです。スウィフト3で

+0

[Swift:uibuttonがタップされているときに新しいアプリを開く方法](http://stackoverflow.com/questions/33932303/swift-how-to-open-a-new-app-when-uibutton) -is-tap) –

答えて

0

フレームワークターゲットを使用して、UIViewなどの任意の一般的なコードを実質的に含めることができます。あなたの枠組みの中で

:あなたのアプリで

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の子VCにすることができます。このようなシナリオでは、@ Lionがあなたに与えたより手作業の解決策が得意かもしれません。

here's私は数週間前に回答した質問からFrameworkターゲットを設定する方法の詳細な説明をお読みください。

EDITコメントに基づいて、ここでもう少し役に立つかもしれません。まず、私の元の回答には、最後にXcodeで設定するのに役立つリンクが含まれていることを覚えておいてください。また、重要なことは - おそらく最も重要なこと - 物事を適切に設計することです!

同じように見え、特定のアプリ内の特定の機能に接続できる一連のボタンを追加する共通のコードを使用したいとします。

最初に、プラットフォームのためにできることとできないことを認識します。あなたはCocoa(Foundation)とCocoa Touch(UIKit)を持っています。つまり、NSButtonとUIButtonがあります。私はあなたが単に "ボタン"を返すフレームワークを作ることはできません。 (しかし、フレームワークは、プラットフォームに依存しないためCore Imageフィルタの出力を返すことができます)。

UIKitに制限を加えて、ストーリーボードとコントローラを表示しましょう。私は後者について多くの混乱を見いだしている。 "ビュー"と "ビューコントローラ"には大きな違いがあります。昨日、私は質問のためにこれを編集しました。 UIViewは、UIKitのほぼすべてのコントロールのベースです。 UIViewControllerには、ビューを操作するロジックが含まれています。 (今はMVC 101です。)

ストーリーボードは、Xcode固有のもので、再利用可能な方法ではありません。あなたができることかもしれません。結局のところ、Xcodeが使用する特定のXMLフォーマットです。

おそらくUIViewControllerをフレームワーク呼び出しの戻り値として使うことはできませんが(少なくとも簡単にはできませんが)、UIViewとそのサブクラスを使用できます。そして、何を推測する? UIButtonはそのようなものです。

スウィフトはフレームワークに多くを導入します。拡張機能と便利初期化子は2つの機能です。あなたがフレームワークにこれを入れてみましょう:

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"))! + "/" +名前付き theImage = UIImage(contentsOfFile:imagePath) イメージを返す! }

[あなたのフレームワークIDを持つ「com.company.name」、およびバンドルの名前で「画像」を置き換え]そして、あなたがいる限り、あなたを輸入して、あなたのアプリケーションでこれを行うことができますフレームワーク:

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とフレームワークで微妙なことを学んでいます...オプションなど。

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ロジックは、UIViewのサブクラスであるToolBoardクラスの一部としてそこにあります。私のすべてのアプリケーションは、ビューコントローラにあります(1)ToolBar、ツールバーボタン、およびボード(そのサイズとともに)をインスタンス化する、(2)クローズボタンを作成し、閉じるためにフレームワークを呼び出す、アプリ固有のコード(3)を残してください。 UIViewControllerをフレームワーク呼び出しに移動する方法が見つからないかもしれませんが、すべての共通コードとビューを1つに移動できるはずです。

+0

フレームワークを迅速に作成するためのビデオチュートリアルはありますか?フレームワークの中には、ボタンをクリックするなどの機能を備えた迅速なファイルとストーリーボードがあります。 iOSプロジェクトでの実装。あなたのチュートリアルを私にリンクさせることができれば素晴らしいでしょう。 :) – ibmot

+0

私は古い学校のコーダーです。私は1984年以来コンピュータをプログラミングしていて、いくつかの言語(メインフレームとマイクロソフトのプラットフォームにかなり詰まっている)を知っていて、2005年以来Xcodeに取り組んでいました。Xcode 4までは別の "MVC"プラットフォームをコーディングしました。再利用可能なコードを使用することは、どのIDE(この場合はXcode)を使用しても、あなたがどのプラットフォーム(この場合はUIKitまたはFoundation)と言語(Swift)を使用していても同じです。 。私は私の答えに役立つかもしれない短い更新を行います。 – dfd

1

現在のプロジェクトから別のプロジェクトのviewcontrollerを開くことはできません。そのためには、具体的なviewcontrollerをプロジェクトに追加する必要があります。そのviewcontrollerをコピーして貼り付けることができ、それはあるプロジェクトから別のプロジェクトに容易に授業です!はい、あなたはあなたのアプリから別のインストールされたアプリケーションを開くことができます(しかし、これは私があなたの質問から理解しているようには望みません)!

関連する問題