Swift调用Objective-C编写的代码(颜色选择器KKColorListPicker调用)
(本文代码已升级至Swift4)
效果图如下:
实现步骤:
1,首先在项目里导入 KKColorListPicker 的源码(整个文件夹,在项目上有键“Add Files To XXX”).
2,手工创建桥接头文件 bridge.h 来包含需要引用的 Objective-C 头文件,内容如下:
//KKColorsSchemeType.h已经包含在KKColorListViewController.h #import "KKColorListViewController.h" #import "KKColor.h"
4,页面使用样例(ViewController.swift)
import UIKit class ViewController: UIViewController, KKColorListViewControllerDelegate { //Object-C编写的颜色选择器视图 var viewColor:KKColorListViewController! override func viewDidLoad() { super.viewDidLoad() //初始化颜色选择面板 //这个颜色选择面板是用OC开发,我们导入头文件后就能在Swift里调用了 viewColor = KKColorListViewController(schemeType:KKColorsSchemeType.crayola) //此类实现了颜色选择面板的代理协议,并重载了选择颜色和关闭2个回调函数 viewColor.delegate = self //创建一个按钮 let button:UIButton = UIButton(type: .system) //设置按钮位置和大小 button.frame = CGRect(x:10, y:50, width:100, height:30) //设置按钮文字 button.setTitle("选择背景色", for: .normal) button.addTarget(self, action: #selector(selColor(_:)), for: .touchUpInside) self.view.addSubview(button); } //点击选择背景色的事件操作 @objc func selColor(_ button:UIButton) { //显示颜色选择面板 self.present(viewColor, animated: true, completion:nil) } //选择颜色后回调 func colorListController(_ controller:KKColorListViewController, didSelect color:KKColor){ //关闭颜色选择器视图 viewColor.dismiss(animated: true, completion:nil) //设置当前视图的背景颜色为用户选择的颜色 self.view.backgroundColor = color.uiColor() } //用户在颜色选择器视图里点击了关闭 func colorListPickerDidComplete(_ controller:KKColorListViewController) { //只需要关闭颜色选择器视图 viewColor.dismiss(animated: true, completion:nil) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
源码下载:hangge_642.zip
站长,Demo运行不了啊
站长,我有个项目,接口源码只有oc的,如果我只调用oc项目里的方法,该怎么弄呢?真的不想全转swift
Xcode 7.3.1中
var button:UIButton = UIButton.buttonWithType(UIButtonType.System) as! UIButton;
报错
let button:UIButton = UIButton(type:.System) as UIButton
我在写代码之前的步骤都没问题,可是viewcontroller里写时,class ViewController: UIViewController, KKColorListViewControllerDelegate {,直接不给提示,后来我把文件夹里的文件全一个一个Add Files To XXX到项目里才行,还不能带文件夹。但是直接运行你的源码没问题,请问这是怎么回事?