add*_*dzo 3 objective-c storyboard uiviewcontroller swift
我有一个 Obj C 项目,我已经向其中添加了一个 Swift viewController。
我正在尝试将故事板附加到 viewController。
我可以以编程方式向视图添加内容,但无法显示故事板。
我还尝试使用 xib 作为 Swift viewController 的竞争,但没有运气。
从 didSelectRowAtInexPath 调用 Swift vie form Obj C:
SwiftController *sc = [[SwiftController alloc] init];
[self.navigationController pushViewController:sc animated:YES];
Run Code Online (Sandbox Code Playgroud)
SwiftController.swift:
import Foundation
import UIKit
@objc class SwiftController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// This prints
println("in the scrolling view")
// This works
self.view.backgroundColor = .redColor();
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Run Code Online (Sandbox Code Playgroud)
故事板正确连接:


这就是我每次得到的:

使用 xib 会发生相同的结果。
Apple Docs 和网络上以及 SO 上有很多东西可以处理“围绕”这个问题的许多问题,但我没有找到任何可以帮助我了解我在这里做错了什么的东西。以行之有效的方式做事或 Obj C 似乎行不通。显然,我是 Swift 的菜鸟。任何帮助都会很棒。谢谢。
使用故事板时有两种基本方法:
当您的 Objective-C 代码需要转换到故事板中的另一个场景时,您可以:
SwiftControllerScene在 Interface Builder 中为该目标场景提供一个故事板 ID(例如);
使用故事板instantiateViewControllerWithIdentifier实例化该目标视图控制器;和
过渡到那个新场景(即推送或呈现该视图控制器)。
因此:
SwiftController *sc = [self.storyboard instantiateViewControllerWithIdentifier:@"SwiftControllerScene"];
[self.navigationController pushViewController:sc animated:YES];
Run Code Online (Sandbox Code Playgroud)或者,当使用故事板时pushViewController,我宁愿在故事板中的视图控制器之间设置一个 segue ,而不是手动实例化目标的视图控制器然后调用(参见/sf/answers/1935514521/) . 然后我会以编程方式执行转场(当然,参考您为转场提供的任何故事板标识符):
[self performSegueWithIdentifier:@"SegueToSwiftScene" sender:self];
Run Code Online (Sandbox Code Playgroud)
这样,故事板继续代表应用程序的视觉流程。
请注意,目标场景的视图控制器是用 Swift 和 Objective-C 编写的这一事实在很大程度上是无关紧要的。问题仅仅是源视图控制器使用什么语言(因此上面的例子是在 Objective-C 中的),并且无论目标视图控制器的语言如何,过程在其他方面基本相同。
| 归档时间: |
|
| 查看次数: |
4980 次 |
| 最近记录: |