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)
}
在需求不明确的情况,可以使用该时间选择器,能够节省很多的开发时间。
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])