客户端工程师开发IOS踩坑日记

一、渐变的uiView

iOS中的渐变主要原理其实就是通过CAGradientLayer,将CAGradientLayer添加在我们要设置背景色的视图的layer层,然后设置渐变的位置,在设置颜色的分割点即可,我把它写到了扩展函数中,可供参考

二、UITableView更换背景颜色

方案1,直接修改backgroundColor
tableView.backgroundColor = UIColor.black
方案2,通过backgroundView间接修改
 let tableViewBackgroud = UIView(frame: tableView.frame)
        tableViewBackgroud.backgroundColor = UIColor.black
        tableView.backgroundView = tableViewBackgroud


三、UITableView部分控件点击事件

在开发UITableView时,总会有需求,点击item中的部分布局触发不同的效果,这个时候可以采用点击事件传递的方式进行操作,参考代码如下

typealias FocusItemClick = (_ content : Int,_ type:Int) -> Void

(在外部定义一个类)

        contentView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(selectClick(tap: ))))

(在UITableViewCell内部为需要的view定义点击事件)

@objc func selectClick(tap: UITapGestureRecognizer) {
        if itemClick != nil {
            itemClick!(clickIndex,0)
        }
    }

(将点击事件传递出去)

cell?.itemClick =  {(content : Int,type:Int) -> Void in
           
           }

(在UIViewController中的tableView的相关方法中传入点击事件)


四、UITableView不设置backgroundView导致崩溃的坑

在我上一条中提到的处理点击事件的方案,在设置UITableView的背景颜色后会导致崩溃,解决方案是,不设置UITableView的backgroundColor,而是设置backgroundView,灿开代码如下

let tableViewBackgroud = UIView(frame: tableView.frame)
        tableViewBackgroud.backgroundColor = UIColor.colorWithHexString("#F7F7F7")
        tableView.backgroundView = tableViewBackgroud


五、textField设置padding

iOS不像安卓开发一样,在定义时可以直接设置padding属性,而是通过内嵌一个view来实现这个功能,参考代码如下

let paddingView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 30))
        searchEdit.leftView = paddingView
        searchEdit.leftViewMode = .always


六、textField监听事件踩坑

textField监听事件的监听事件,查到最常用的用法是

searchEdit.delegate = self

然后在ViewController继承UITextFieldDelegate,然后在textField的相关方法中处理

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        <#code#>
    }

但是,我发现它获取的值是有问题的,获取的字符串永远是上一个字符串,,比如说当我输入第一个字符串“a”时,获取到的是空字符串,

当我输入第二个字符串“f”时,获取到的是“a”字符串,当我输入第三个字符串“c”时,获取到的是“af”字符串。所以我采用了别的解决方案,参考代码如下:

searchEdit.addTarget(self, action: #selector(keyboardInputShouldDelete(_:)), for: .editingChanged)
 @objc fileprivate func keyboardInputShouldDelete(_ textField:UITextField){
        let text = textField.text?.count ?? 0
        <#code#>
    }

这个方案可以有效的获取当前的字符串

请使用浏览器的分享功能分享到微信等