Xcode6.4 Swift 特定のページのみStoryboardを使用するには
現在、Xcode6.4 SwiftでStoryboardを使用せずにコードだけでアプリを作っています。
が、あるページでTableViewのカスタムセルを使うことになりコードだけで書くのは困難なためそのページだけStoryboardを使用したいと思っています。
StoryboardとXibは最初に削除しており、その後新たに追加しました。
info.plistのMain storyboard file base nameには追加したStoryboard名を追加しましたが、Storyboardで作ったTableViewがエミュレータで表示されません。
何か処理が足りないのでしょうか。
コードは以下のようになっています。
// AppDelegate
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.backgroundColor = btWhite
self.window?.rootViewController = UINavigationController(rootViewController: AreaSelectViewController())
// ステータスバー文字色
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
// ナビゲーションバーの色
UINavigationBar.appearance().barTintColor = btGreen
// ナビゲーションバーボタンのベースの色(設定アイコンの色など)
UINavigationBar.appearance().tintColor = btWhite
// ナビゲーションバーのタイトル色フォント
if displayWidth == 414{
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: btWhite, NSFontAttributeName:btFont22B!]
}
else if displayWidth == 375{
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: btWhite, NSFontAttributeName:btFont20B!]
}
else{
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: btWhite, NSFontAttributeName:btFont18B!]
}
// ナビゲーションバーアイテムの色フォント
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: btWhite, NSFontAttributeName: btFont14B!], forState: UIControlState.Normal)
self.window?.makeKeyAndVisible()
return true
}
func applicationWillResignActive(application: UIApplication) {}
func applicationDidEnterBackground(application: UIApplication) {}
func applicationWillEnterForeground(application: UIApplication) {}
func applicationDidBecomeActive(application: UIApplication) {}
func applicationWillTerminate(application: UIApplication) {}
}
//遷移先のView(Storyboardで作ったもの)ここがナビゲーションバーのみ表示され、Tableが表示されない
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// tableViewの紐付け
tableView.delegate = self
tableView.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// セルに表示するテキスト
let texts = ["hello", "swift", "world"]
// セルの行数を取得するメソッド(tableViewの実装に必須)
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return texts.count
}
// セルの内容を変更するメソッド(tableViewの実装に必須)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")
cell.textLabel?.text = texts[indexPath.row]
return cell
}
}
遷移先のViewへは、遷移元から
self.navigationController?.pushViewController(ViewController(), animated: true)
で遷移させています。
また、ViewControllerの
tableView.delegate = self
tableView.dataSource = self
で、
Thread 1:EXC_BAD_INSTRUCTION(code=EXC_l386_INVOP,subcode=0×0
のエラーが画面遷移時に出ます。