Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从Obj C didSelectionRow调用Swift ViewController_Objective C_Swift_Uiviewcontroller_Storyboard - Fatal编程技术网

Objective c 从Obj C didSelectionRow调用Swift ViewController

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

我有一个Obj C项目,我在其中添加了一个Swift viewController

我正在尝试将情节提要附加到viewController

我可以通过编程将内容添加到视图中,但无法显示情节提要

我还尝试使用xib作为Swift viewController的竞争对手,但运气不佳

从DIDSELECTROWATIN调用Swift vie form Obj C:

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_)

使用故事板时有两种基本方法:

  • 当您的Objective-C代码需要转换到故事板中的另一个场景时,您可以:

    • 在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控制器的场景,效果很好。所以我不知道问题是什么。