2016-07-23 6 views
1

저는 MainViewController.swift가 있고 Xbu 파일 (MainViewController라고 함)에 연결되어 있습니다. MainViewController는 MenuViewController.swift와 Xib (MenuViewController)에 연결됩니다. MainViewController는Swift - 스토리 보드의보기 컨트롤러에서 xib 파일을로드하는 방법은 무엇입니까?

override func viewDidLoad() { 
    super.viewDidLoad() 
    ... 
    menuBtn.addTarget(self, action: #selector(callMenuModal), forControlEvents: .TouchUpInside) 
    .... 

} 
func callMenuModal() { 
    let menuVC = MenuViewController() 
    menuVC.delegate = self 
    menuVC.modalPresentationStyle = .OverCurrentContext 
    presentViewController(menuVC, animated: false, completion: nil) 
} 
....... 
func backFromMenu() { 
    self.dismissViewControllerAnimated(true, completion: nil) 
    } 
... 
... 

내 친구가 Segues 및 ViewControllers의 많은 스토리 보드를 만든 다음 코드를 사용하여 MenuViewContoller를 호출합니다.

스토리 보드의 ViewController에서 버튼을 누르면 필자는 .xib 파일과 해당 뷰 컨트롤러를로드해야합니다. 나는 해결책을 찾기 위해 높고 낮게보고 찾지 못했습니다.

이전에 AppDelegate에서 직접 xib를 호출 했으므로 아무 것도 할 필요가 없었습니다. 나는 단지 하나의 스토리 보드보기 컨트롤러와, 내가 위임에 사용 된 코드는 아래와 같습니다으로 전체 응용 프로그램에 대한 앱 위임,

import UIKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

var window: UIWindow? 


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    window = UIWindow(frame: UIScreen.mainScreen().bounds) 

    let mainViewController = MainViewController(nibName: "MainViewController", bundle: nil) 

    window?.rootViewController = mainViewController 
    window?.makeKeyAndVisible() 
    return true   
} 
........rest of app delegate.... 

있었다 그러나 나는 그 XIB 파일을로드하는 방법을 모른다 스토리 보드의 다른보기 컨트롤러 또는 ViewController의 단추 누름 (IBAction)에서 가져옵니다.

let mainViewController = MainViewController(nibName: "MainViewController", bundle: nil) 
뷰 컨트롤러의 인스턴스를

, 당신은 현재 또는 그것을 밀어보기 :

+0

이 간단한 작업을 수행 할 수 없다면 [Apple에서 제공하는 기본 자습서]를 더 읽고 이해해야합니다. (https://developer.apple.com/library/prerelease/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/) – Jeff

답변

1

, 그것은 바로 내 눈 앞에 있었다 ... 그것을 해결 내가 쓸 질문을했다 생각 대답은 나 자신, 하하, 나는 똑똑해, 나는이 코드를 스토리 보드에서 뷰 컨트롤러에 추가했으며 매력처럼 작동한다. 내 XIB보기 컨트롤러

import UIKit 

class ViewController: UIViewController, communicationControllerM { 

    @IBOutlet weak var Btn: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     Btn.addTarget(self, action: #selector(callMenuModal), forControlEvents: .TouchUpInside) 
    } 

    func callMenuModal() { 
     let mainVC = MainViewController() 
     mainVC.delegate = self 
     mainVC.modalPresentationStyle = .OverCurrentContext 
     presentViewController(mainVC, animated: false, completion: nil) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func backFromM() { 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 
} 

은 내가 복귀 동작

playBtn.addTarget(self, action: #selector(goBackToMainVC), forControlEvents: .TouchUpInside) 
self.delegate?.backFromM() 

고마워 추가!

+1

'Btn' 및'backFromM'과 같은 기호 이름과 관련하여 [약어에 대한 Swift API 디자인 지침] (https://swift.org/documentation/api-design-guidelines/#general-conventions)을 읽는 것이 좋습니다. – Jeff

0

당신은 뷰 컨트롤러와 관련 nib 파일이 이미 코드에서 그 일을 정확하게하는 방법을로드 펜촉에서로드되고 인터페이스에 배치됩니다.

3

스토리 보드에서 직접 MainViewController에 접속할 수 없습니다. 하지만 앱 위임자와 마찬가지로 앱을로드하여 표시 할 수 있습니다.

MainViewController을 어떻게 표시 하시겠습니까? 네비게이션 스택에 밀어 넣고 모달로 표시하거나 다른 것입니까? UINavigationController을 사용하고 있다고 가정하고 스택에 푸시하고자합니다. 친구의 UIViewController 클래스에서

,로드 제시하는 방법을 추가하려면 MainViewController :

func presentMainViewController() { 
    let mainVC = MainViewController(nibName:"MainViewController", bundle:nil) 
    self.navigationController.pushViewController(mainVC, true); 
    // you could present it another way, such as: 
    // self.presentViewController(mainVC, true, nil) 
    // to present it as a modal 
} 
+0

고맙습니다;) 작동합니다. –

0

클래스 변수로서이 할당 :

var nibName: NibViewClass? 

뾰족 만들어 해당 클래스에 할당.당신은 펜촉을로드하여 원하는 목적지 뷰 컨트롤러 내부

,

nibName = NSBundle.mainBundle().loadNibNamed("NibView", owner: self, options: nil) as? NibViewClass 

이 있는지 확인 전화를 그 "NibView"== 펜촉 UI 파일의 이름.

if nibName != nil { 
    self.view.addsubview(nibName!) 

    //add this line to make it appear where you want it. 
    nibName.frame = CGRectMake(xPosition, yPositionOffScreen, nibWidth, nibHeight) 
} 

지금이 당신을 위해 대부분의 작업을 할 것입니다,하지만 난 그것뿐만 아니라 애니메이션을 추천 할 것입니다 : 그런 다음과 같이 하위 뷰로 추가해야합니다. 내가 자주 사용하는이 그렇게 할 수있는 몇 가지 방법이 있지만, 사람은 그렇게 같다 :

UIView.animateWithDuration(0.7, delay: 1.0, options: .CurveEaseIn, animations: { 
     nibName.frame.origin.y = yPositionOnScreen 
    }, completion: { finished in 
     //code to run after nib finishes movement 
    }) 

어떤 시점에서 당신은, 당신이 당신의 ViewController 내부에서의 지역 변수를 해당 클래스를 할당 할 수의 IT에 nibName을 할당 한 후. 원하는 경우 x 위치로 펜촉을 애니메이션 할 수도 있습니다. y 값을 반전 한 동일한 함수를 사용하여 화면을 벗어나면 화면 밖으로 다시 보냅니다.