Swift编程

Swift小技巧(六)

2017-05-10  本文已影响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])
上一篇下一篇

猜你喜欢

热点阅读