Swift小技巧(六)

1.如何自定义class的描述信息

class Custom: NSObject {
    override var description: String {
        return "调试信息"
    }
    override var debugDescription: String {
        return "测试输出信息"
    }
}
let custom = Custom()
print(custom)//调试信息
print(custom.description)//调试信息
print(custom.debugDescription)//测试输出信息

2.如何获得app内部的某个plist文件,并生成一个swift的字典来使用

if let path = Bundle.main.path(forResource: "Config", ofType: "plist") {
    if let dict = NSDictionary(contentsOfFile: path) as? Dictionary<String, AnyObject> {
        print("可以用swift的dictionary的方式使用dict了")
    }
}

3.使用自带的uidatepicker选择日期

        let picker = UIDatePicker(frame: view.bounds)
        picker.datePickerMode = .dateAndTime//设置选择的模式
        picker.addTarget(self, action: #selector(datePickerChoice(sender:)), for: .valueChanged)//添加事件

//实现事件
    func datePickerChoice(sender: UIDatePicker) {
        print(sender.date)
    }

在需求不明确的情况,可以使用该时间选择器,能够节省很多的开发时间。


屏幕快照 2017-05-09 下午3.30.03.png

4.dequeueReusableCellWithIdentifier和dequeueReusableCellWithIdentifier : forIndexPath之间的区别

1.dequeueReusableCellWithIdentifier : forIndexPath必定会返回一个cell,可能是已经存在被重用的cell,或者是自动新建的cell
2.dequeueReusableCellWithIdentifier如果存在重用的cell,则返回,否则返回nil
3.从上面的描述,我可以知道,forIndexPath方法,必须在注册了cell之后才能使用。而没有forIndexPath的方法,是在没有注册cell的时候使用的,返回了nil之后,需要手动创建cell。

5.如何给button设置圆角

//给button扩展一个方法
extension UIButton {
    
    /// 添加圆角
    ///
    /// - parameter radius:      圆角半径
    /// - parameter borderColor: 边框颜色
    func setRoundRect(radius: CGFloat = 5, borderColor: UIColor = .clear) {
        layer.cornerRadius = radius
        layer.borderColor = borderColor.cgColor
        layer.borderWidth = 1
    }
}

6.如何判断一个字典中,是否包含某个key

在swift中,不需要任何复杂的判断,因为dict[key]取出来的值,是一个可选值。如果为nil,则表示,不存在该key。
所以,如果需要判断是否存在某个key,这样使用即可:

let dict = ["a": 1]
let keyExists = dict["a"] != nil //true存在

如果确定存在某个key,这样使用:

let value = dict["a"]!

如果需要使用取出来的value,这样使用即可:

if let val = dict["b"] {
    //后续代码
}

7.swift中如何获得PI常数

Double.pi//3.141592653589793
Float.pi//3.141593
CGFloat.pi//3.14159265358979

8.如何设置状态栏的颜色和样式

//在VC中重写下列方法
    override var preferredStatusBarStyle: UIStatusBarStyle {
        //状态栏样式:default-黑色  lightContent-白色
        return .default
    }
    
    override var prefersStatusBarHidden: Bool {
        //状态栏是否隐藏:true是  false不隐藏
        return true
    }

9.如何自定义tableview的headview

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let view = UIView(frame: CGRectMake(0, 0, tableView.frame.size.width, 18))
    let label = UILabel(frame: CGRectMake(10, 5, tableView.frame.size.width, 18))
    label.font = UIFont.systemFontOfSize(14)
    label.text = list.objectAtIndex(indexPath.row) as! String
    view.addSubview(label)
    view.backgroundColor = UIColor.grayColor() // Set your background color

    return view
}

10.如何解决模拟器上面不弹出键盘的问题

iOS Simulator-> Hardware-> Keyboard ->取消选中该Connect Hardware Keyboard,键盘就会出现。

11.如何修改系统tableview的头视图或尾视图的标题文字样式大小等

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    guard let header = view as? UITableViewHeaderFooterView else { return }
    header.textLabel?.textColor = UIColor.red
    header.textLabel?.font = UIFont.boldSystemFont(ofSize: 18)
    header.textLabel?.frame = header.frame
    header.textLabel?.textAlignment = .center
}

12.如何在类将要销毁时做一些操作

    deinit {
        //这里执行类要销毁时的动作
    }

13.检测字符串是否是空字符串

if emptyString.isEmpty {
    print("Nothing to see here")
}

14.如何获得uitextfield的编辑事件

textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

func textFieldDidChange(_ textField: UITextField) {
//检查输入等操作
}

15.如何获得屏幕宽高等

let screenSize = UIScreen.main.bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height

16.如何过滤掉数组中相同的元素

//扩展一个方法
extension Array where Element: Equatable {
    //筛除相同的元素
    func removeDuplicates() -> [Element] {
        var result = [Element]()
        
        for value in self {
            if result.contains(value) == false {
                result.append(value)
            }
        }
        
        return result
    }
}
//使用
let arr = [2, 3, 2, 4]
arr.removeDuplicates()// [2 3 4]

17.如何实现两个字典相加,生成新的字典

//扩展一个方法
extension Dictionary {
    mutating func append(other:Dictionary) {
        for (key,value) in other {
            self.updateValue(value, forKey:key)
        }
    }
}
//使用
var dic1 = [1: 2]
var dic2 = [2: 3]
dic1.append(other: dic2)//[2: 3, 1: 2]

18.为什么设置当前页面的navigation的backitem没有效果?

因为baickitem是属于上一层视图控制器的,所以,要修改返回按钮,需要在上一层控制器中修改

    let backItem = UIBarButtonItem()
    backItem.title = "Back"
    navigationItem.backBarButtonItem = backItem

19.如何设置,让键盘弹起时,界面上移键盘的高度,收回时,恢复正常位置

override func viewDidLoad() {
    super.viewDidLoad()       
    //添加键盘弹起和收回时的通知     
    NotificationCenter.default.addObserver(self, selector: #selector(Login.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(Login.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)    
}
//实现响应方法该变位置
func keyboardWillShow(notification: NSNotification) {        
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y == 0{
            self.view.frame.origin.y -= keyboardSize.height
        }
    }        
}

func keyboardWillHide(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y != 0{
            self.view.frame.origin.y += keyboardSize.height
        }
    }
}

20.如何设置textfield的placeholder的颜色,样式等

var myTextField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 30))
        myTextField.attributedPlaceholder = NSAttributedString(string: "placeholder text",
                                                               attributes: [NSForegroundColorAttributeName: UIColor.yellow])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容