2016-01-21 100 views
1

我剛開始在Swift上開發IOS,現在我被困在一件事上。我想要的是將字符串值從一個ViewController傳遞給其他。調用其他ViewController打開黑屏

1日 - 視圖 - 控制器

// on TableCell Click 


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {  
     CommonFunctions.setDefaults("a", value: arr[indexPath.row]) 
     let viewController = SecondView(passedData:arr[indexPath.row]) 
     self.presentViewController(viewController, animated: true, completion: nil) 
} 

第二的ViewController

var test:String 


init(passedData:String){ 
    self.test = passedData 
    super.init(nibName: nil, bundle: nil) 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print(CommonFunctions.getDefaults("a")) 
} 

我成功得到字符串在第二ViewController但問題是,我得到一個黑色的屏幕。

回答

4

你得到一個黑色的屏幕,因爲你正在使用此代碼let viewController = SecondView(passedData:arr[indexPath.row])初始化你SecondViewController

這是調用您創建的自定義初始化程序,它不會加載SecondViewControllerview屬性。

有解決這個幾種方法:如果您使用的故事板,你應該,而不是手動初始化視圖控制器使用賽格瑞並通過對prepareForSegue數據

performSegueWithIdentifier("The identifier of your segue on storyboard", sender: nil) 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "The identifier of your segue on storyboard" { 
     let secondViewController = segue.destinationViewController as! SecondViewController 
     secondViewController.passedData = //data 
    } 
} 

如果您正在使用xibs你應該使用

let secondViewController = SecondViewController(nibName: "Name of your nib file", bundle: NSBundle.mainBundle()) 
secondViewController.passedData = //data 

或您的自定義添加的初始化劑的筆尖的筆尖名稱:

init(passedData:String){ 
    self.test = passedData 
    super.init(nibName: /*Add your nib name here*/, bundle: nil) 
} 
+0

更具體地要初始化'UIViewController'與'nil''nibName'(請參閱https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instp/UIViewController/nibName),它試圖加載筆尖的名稱與控件匹配ler的班級,顯然無法找到一個。控制器無法加載它的視圖留下空白(黑色)屏幕。 – Jonah

+0

是的,感謝您的補充。 () –

+0

@RaphaelOliveira然後先生我將如何通過init() –

-1

試試這個

self.modalTransitionStyle = UIModalTransitionStyle.CoverVertical 
    // Cover Vertical is necessary for CurrentContext 
    self.modalPresentationStyle = .CurrentContext 
    // Display on top of current UIView 
    self.presentViewController(secondViewController(), animated: true, completion: nil) 

,並在你的第二個視圖控制器

view.backgroundColor = UIColor.clearColor() 
view.opaque = false 
相關問題