从Obj C didSelectionRow调用Swift ViewController

时间:2015-05-01 22:41:35

标签: objective-c swift uiviewcontroller storyboard

我有一个Obj C项目,我已经添加了一个Swift viewController。

我正在尝试将一个故事板附加到viewController。

我可以通过编程方式向视图添加内容,但我无法显示故事板。

我也尝试使用xib作为Swift viewController的vie而没有运气。

从didSelectRowAtInexPath调用Swift vie形式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.
    }
}

故事板连接正确:

1

2

这就是我每次都得到的:

3

使用xib会发生相同的结果。

Apple Docs和网络上有很多东西,在这里处理许多问题“围绕”这个问题,但我没有发现任何可以帮助我看到我在这里做错的事情。按照工作方式或Obj C做事似乎不起作用。 显然我是Swift的菜鸟。任何帮助都会很棒。感谢。

1 个答案:

答案 0 :(得分:1)

如果您使用xib作为swift viewController,则必须按以下方式初始化它:

SwiftController* controller = [[SwiftController alloc]  initWithNibName:@"SwiftController" bundle:nil]

其中SwiftController也是xib的名称。

我在iOS 8中注意到了这个问题,但是当你按照这样的方式启动控制器时,它在iOS 9和iOS 10中正常工作:

SwiftController* controller = [[SwiftController alloc]  init];