美文网首页
swift runtime method_exchange方法

swift runtime method_exchange方法

作者: 丢了理想 | 来源:发表于2018-11-01 13:37 被阅读0次

由于项目都写完了需要适配ipad,网上搜索了一下,都有小问题

如果写在baseVC的present里面对基类代码侵入比较高,解耦并不好

如果每个都添加适配,复制代码量太大,修改也会麻烦

所以打算用runtime写 因为UIAlertController只有一个初始化方法,所以不能用,不然会无限循环,触发初始化方法

所以用了KVC来改变preferredStyle只能get的问题

    public class func initMethodExchange() {

       let originalSelector = #selector(UIAlertController.init(title:message:preferredStyle:))

        let swizzledSelector = #selector(UIAlertController.ywx_init(title:message:preferredStyle:))

       let originalMethod = class_getClassMethod(self, originalSelector)

        let swizzledMethod = class_getClassMethod(self, swizzledSelector)

       method_exchangeImplementations(originalMethod!, swizzledMethod!)

}

    @objc class func ywx_init(title:String?, message:String?, preferredStyle:UIAlertControllerStyle) ->UIAlertController{

        let alert = UIAlertController.init()

        alert.setValue(preferredStyle.rawValue, forKeyPath:#keyPath(UIAlertController.preferredStyle))

        alert.title= title

        alert.message= message

        if UIDevice.current.userInterfaceIdiom == .pad {

            let source = UIApplication.shared.keyWindow?.rootViewController?.view

            alert.popoverPresentationController?.sourceView = source

            alert.popoverPresentationController?.sourceRect=CGRect(x:source!.bounds.midX, y: source!.bounds.midY, width:0, height:0)

        }

        return alert

    }

也可以创建oc分类文件重些init方法,推荐分类, 比swift方便多很多

相关文章

  • swift runtime method_exchange方法

    由于项目都写完了需要适配ipad,网上搜索了一下,都有小问题 如果写在baseVC的present里面对基类代码侵...

  • ios Runtime动态性分析

    Swift Runtime动态性分析 总结 纯Swift类没有动态性,但在方法、属性前添加dynamic修饰可以获...

  • iOS runtime swift swizzling

    iOS runtime swift中的Swizzling方法交换 背景知识 Swift 是一种强类型语言。即默认类...

  • swift基础_runtime

    一.swift的runtime是个啥 我们将swift的类继承自NSObject,给方法加上@obj dynami...

  • Swift是否和OC一样有runtime机制

    引文:Swift是否和OC一样有runtime机制 纯Swift类没有动态性,但在方法、属性前添加dynamic修...

  • WWDC 2019 What's New in SwiftUI

    Shared Swift Runtime for AppsBinary FrameworksApple Swift...

  • 读书笔记(二)

    Swift Runtime分析:还像OC Runtime一样吗? 动态性比较重要的一点就是能够拿到某个类所有的方法...

  • Swift5.1学习随笔之多态

    多态的实现原理: OC:Runtime C++:虚表(虚函数表) Swift:纯Swift没有Runtime,更加...

  • runtime

    传送地址: http://nshipster.com/swift-objc-runtime/ runtime代码...

  • Swift-Runtime 基本应用

    使用Swift编程,未免会使用到Runtime,下面是Swift-RunTime的基本使用,希望对大家有所帮助。 ...

网友评论

      本文标题:swift runtime method_exchange方法

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