美文网首页Swift编程
Swift小技巧(六)

Swift小技巧(六)

作者: 狂奔的胖蜗牛 | 来源:发表于2017-05-10 11:42 被阅读56次

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

    相关文章

      网友评论

        本文标题:Swift小技巧(六)

        本文链接:https://www.haomeiwen.com/subject/fiabtxtx.html