swift写UI界面的

swift写UI界面的,第1张

//appdelegate里初始化独立的:

self.window?.rootViewController = UINavigationController(rootViewController: ViewController())

//导航上的左系统按钮:

self.navigationItem.leftBarButtonItem = UIBarButtonItem (barButtonSystemItem:        UIBarButtonSystemItem.camera, target: self, action: #selector(add(sender:)))

//自己写的导航上的按钮

let leftBtn = UIBarButtonItem(title: "back", style: .plain, target: self, action: #selector(leftButton))

        self.navigationItem.leftBarButtonItem = leftBtn

//添加图片:

前面是:var img : UIImage?

        img = UIImageView(frame: CGRect(x: 160, y: 100, width: 80, height: 80))

        img?.image = UIImage(named: "未选中的副本")

        self.view.addSubview(img!)

//文本框

前面是:var text : UITextField? = nil

text = UITextField(frame: CGRect(x: 50, y: 250, width: 300, height: 50))

        text?.backgroundColor = .green

        //提示文字

        text?.placeholder = "222"

        self.view.addSubview(text!)

//button

        btn = UIButton(frame: CGRect(x: 70, y: 380, width: 250, height: 50))

        btn?.backgroundColor = .blue

        btn?.setTitle("12345", for: .normal)

        self.view.addSubview(btn!)

//表格

tbv?.register(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")

let identify = "SwiftCell"

let cell = tableView.dequeueReusableCell(withIdentifier: identify, for: indexPath)

或者带副标题的:(里面是这个,上面多的注了)

let identify = "SwiftCell"

        var cell = tableView.dequeueReusableCell(withIdentifier: identify)

        if cell == nil {

            cell = UITableViewCell.init(style: UITableViewCellStyle.subtitle, reuseIdentifier:identify)

        }

左右侧滑的

/// 标题

        let titles = ["推荐","快讯", "深度", "实点对话", "行情分析"]

        //样式

        let style = YCTitleStyle()

        //可以滚动

        style.isScrollEnable = false

        // 所以的子控制器

        var childVcs = [UIViewController]()

        for _ in 0..<titles.count {

            let vc = UIViewController()

            vc.view.backgroundColor = UIColor.white

            childVcs.append(vc)

        }

        // pageView的frame

        let pageFrame = CGRect(x: 0, y: 65, width: view.bounds.width, height: view.bounds.height - 110)

        // 创建YCPageView,并且添加到控制器的view中

        let pageView = YCPageView(frame: pageFrame, titles: titles, childVcs: childVcs, parentVc: self, style : style)

        view.addSubview(pageView)

        tbv = UITableView(frame: CGRect(x: 0, y: 110, width: self.view.frame.size.width, height: self.view.frame.size.height-100), style: .plain)

        tbv?.delegate = self

        tbv?.dataSource = self

        tbv?.register(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")

        self.view.addSubview(tbv!)

在ios的OC和Swift混合开发无非是2种,一种是在OC的项目中使用Swift语言开发,这里就需要创建Swift文件(或者引用Swift写的的第三方库),另一种是在Swift项目中使用OC语言开发,这里就需要创建OC文件,(或者引用OC写的的第三方库)

首先我们在一个已有的OC的项目中,创建一个Swift文件

这里Xcode就会自动提示我们如:图1

Would you like to configure an Objective-C bridging header?

Adding this file to ocProjectUseSwift will create a mixed Swift and Objective-C target. Would you like Xcode to automatically configure a bridging header to enable classes to be accessed by both languages?

提示我们创建一个桥接的头文件,当我点击 “ Create  Bridging Header”,Xcode就给我们自动创建,自动创建的规则是:项目名+ "-Bridging-Header.h" 如图2

同时在项目中创建一个Swift文件

然后在在 targets ->Build Settings ->Packaging 中设置Defines Module 为YES

设置完后开始使用,怎么在oc中使用Swift的类呢?

重点: 在文件中引用 #import "ocProjectUseSwift-Swift.h"  记住不是我创建的SecondVC.swift,是“项目名-Swift.h"文件名 ,引入这个文件就引入了所有的Swift文件内的类、方法、属性

说明:这个文件是系统自动创建,自动添加所有我们创建的Swift的类的方法和属性

前提是要在方法和属性前面要加@objc 如图3:

用@objc声明好之后,在我们引用的是“项目名-Swift.h"文件名的 #import "ocProjectUseSwift-Swift.h" 内就看到有标记了如图4

这里分了3块,红色和绿色标记框内是我们自己标记的oc可用的属性和方法,蓝色框内是系统自己生成的oc可以初始化方法

具体使用就在oc文件中,如图5:

此事,在这个OC创建的项目中,我们创建的Swift文件怎么使用OC创建的类呢?

这里就用到我们创建的桥接头文件了,在图2中的桥接头文件,引入OC的头文件,如图6

就这样很简单,所以Swift文件的类都可以使用这个OC文件内的类了,使用起,和OC调用OC的类一样,如如图7和图8

Swift的项目中,第一次创建OC的文件,此时系统会自动帮我们创建桥接头文件,如图9

然后就有了和图2一样的桥接头文件,剩下的就和图6一样,在桥接头文件内引入头文件,即可使用OC的类,第三方库如果也是OC写的,在引入的时候也自动会加这个桥接头文件,当然一个项目只能加一次,加过的就不需要加了

Swift调用OC

Swift调用OC的时候需要在MixDemo-Bridging-Header.h文件中导入Swift会引用到的CO类的头文件。

首先我们在ViewController.h头文件中声明一个函数:

- (void) logYou

然后在实现文件中简单些一下实现:

- (void)logYou {

NSLog(@"log you")

}

然后我们在MixDemo-Bridging-Header.h文件中#import “ViewController.h”文件,command+s保存一下当前的编辑。

然后回到SwiftDemo.swift文件中,在LogMe函数里我们调用一下OC的logYou。

所以我们现在的逻辑是在OC的viewDidLoad中实例化SwiftDemo然后调用logMe,然后在SwiftDemo里的logMe里面实例化ViewController然后调用它的logYou。logMe代码如下:

public func logMe() {

print("log me")

let vc = ViewController()

vc.logYou()

}

然后再跑一下工程


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/bake/11550499.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存