Objective c 从Obj C didSelectionRow调用Swift ViewController
我有一个Obj C项目,我在其中添加了一个Swift viewController 我正在尝试将情节提要附加到viewController 我可以通过编程将内容添加到视图中,但无法显示情节提要 我还尝试使用xib作为Swift viewController的竞争对手,但运气不佳 从DIDSELECTROWATIN调用Swift vie form Obj C:Objective c 从Obj C didSelectionRow调用Swift ViewController,objective-c,swift,uiviewcontroller,storyboard,Objective C,Swift,Uiviewcontroller,Storyboard,我有一个Obj C项目,我在其中添加了一个Swift viewController 我正在尝试将情节提要附加到viewController 我可以通过编程将内容添加到视图中,但无法显示情节提要 我还尝试使用xib作为Swift viewController的竞争对手,但运气不佳 从DIDSELECTROWATIN调用Swift vie form Obj C: SwiftController *sc = [[SwiftController alloc] init]; [self.navigatio
SwiftController *sc = [[SwiftController alloc] init];
[self.navigationController pushViewController:sc animated:YES];
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.
}
}
情节提要已正确连接:
这就是我每次得到的:
xib也会出现同样的结果
在苹果的文档中,在网络上,在这里,有很多东西可以处理很多关于这个问题的问题,但是我没有发现任何东西可以帮助我发现我在这里做错了什么。以有效的方式做事,或者Obj C似乎不起作用。
很明显我是斯威夫特的手下。任何帮助都会很好。谢谢。因为在本例中,您正在初始化一个新的
SwiftController
,而不是使用故事板中的。您将希望执行到新故事板vc的顺序,或者从
self.storyboard.instantiateViewControllerWithIdentifier(_controller id_)
使用故事板时有两种基本方法:
- 在Interface Builder中为目标场景提供一个情节提要id(例如,
)SwiftControllerScene
- 使用序列图像板
实例化目标视图控制器;及实例化eviewcontrollerwhiteIdentifier
- 过渡到该新场景(即推送或呈现该视图控制器)
pushViewController
(请参阅)。然后,我将以编程方式执行segue(当然,引用您为segue提供的任何情节提要标识符):
通过这种方式,故事板继续表示应用程序的视觉流请注意,目标场景的视图控制器是用Swift vs OBJECT-C编写的,这一事实在很大程度上无关紧要。问题仅仅是源视图控制器使用什么语言(因此上述示例在Objective-C中),而不管目标视图控制器使用什么语言,流程基本相同。如果您对swift viewController使用xib,则必须这样初始化它:
SwiftController* controller = [[SwiftController alloc] initWithNibName:@"SwiftController" bundle:nil]
SwiftController* controller = [[SwiftController alloc] init];
其中SwiftController也是您的xib的名称
我在iOS 8中注意到这个问题,但在iOS 9和iOS 10中,当您像这样初始化控制器时,它正常工作:
SwiftController* controller = [[SwiftController alloc] initWithNibName:@"SwiftController" bundle:nil]
SwiftController* controller = [[SwiftController alloc] init];
两个答案都是正确的。但由于这一次教会了我一些额外的东西,我选择了这一次。多亏了罗布、谢尔盖和Schemetral!有趣的是,当使用这个解决方案时,我现在在运行时得到了“Interface Builder文件中未知的类SwiftController”。我在故事板中放置的任何对象都会显示出来,但当我尝试在.swift文件中连接到它们时,会出现可怕的“不符合键值”错误。此外,故事板的模块为“无”,但更改它没有帮助。所以我还没有找到答案。知道为什么会发生这种情况吗?我会确保
SwiftController
类包含在该目标的编译源代码中。但我只是做了一个测试Objective-C项目,添加了一个带有Swift view控制器的场景,效果很好。所以我不知道问题是什么。