美文网首页
iOS hotfix lua语法

iOS hotfix lua语法

作者: 文子飞_ | 来源:发表于2021-04-20 20:55 被阅读0次
    hotfix lua语法
    • 替换WSFRefundBaseCell
    -- 替换WSFRefundBaseCell类里相关的方法
    interface {"WSFRefundBaseCell"}
    
    -- 替换实例方法
    function initSubViews(self)
        print("begin------ WSFRefundBaseCell replace function initSubViews ------")
        -- self.super:initSubViews(self)
        -- 1、ORIG:调用原有initSubViews方法
        self:ORIGinitSubViews()
        
        -- 创建UI + 布局
        local button = UIButton:buttonWithType(UIButtonTypeCustom)
        button:setTitle_forState("LuaButton", UIControlStateNormal)
        button:setTitleColor_forState(UIColor:blueColor(), UIControlStateNormal)
        button:setBackgroundColor(UIColor:lightGrayColor())
        self:containerView():addSubview(button)
        -- 2、带下划线的方法:UNDERxLINE 代替 _
        toobjc(button):masUNDERxLINEmakeConstraints(
            toblock(
                function(make)
                make:top():equalTo()(self:containerView()):offset()(40)
                make:right():equalTo()(self:containerView()):inset()(20)
                -- make:top():masUNDERxLINEequalTo(self:containerView())
                -- make:right():masUNDERxLINEequalTo(self:containerView())
                end
                ,{"void", "MASConstraintMaker *"}
            )
        )
        
        -- 设置Label颜色
        local refundContentViewLeftLabel = self:refundContentView():refundMoneyLabel():leftLabel()
        refundContentViewLeftLabel:setTextColor(UIColor:blueColor())
        
        -- 原有UI 更新布局
        local rightLabel = self:refundContentView():titleView():rightLabel()
        rightLabel:setTextColor(UIColor:blueColor())
        local leftLabel = self:refundContentView():titleView():leftLabel()
        
        toobjc(rightLabel):masUNDERxLINEremakeConstraints(
            toblock(
                function(make)
                make:leading():equalTo()(leftLabel:masUNDERxLINEtrailing()):offset()(20)
                make:centerY():equalTo()(leftLabel)
                end
                ,{"void", "MASConstraintMaker *"}
            )
        )
        
        print("end------ WSFRefundBaseCell replace function initSubViews ------")
    end
    
    
    -- 替换实例方法
    function setRefundModel(self, refundModel)
        self:ORIGsetRefundModel(refundModel)
        local applyPrice = string.format("Lua实际退款金额:%s",refundModel:realPrice())
        self:refundContentView():refundMoneyLabel():leftLabel():setText(applyPrice)
    end
    
    • WSFRefundCellContentView类里新增属性、方法
    -- WSFRefundCellContentView类里新增属性、方法
    interface {"WSFRefundCellContentView", protocols = {"UITableViewDelegate", "UITableViewDataSource"}}
    
    -- 新增 luaTableView 属性
    function luaTableView(self)
        if self._luaTableView == nil then 
            self._luaTableView = UITableView:init()
            self._luaTableView:setDelegate(self)
            self._luaTableView:setDataSource(self)
            self._luaTableView:setBackgroundColor(UIColor:lightGrayColor())
        end
        return self._luaTableView
    end
    
    function setLuaTableView(self, luaTableView)
        self._luaTableView = luaTableView
    end
    
    -- 新增方法(返回值和参数均为id类型) 
    function initLuaSubViews(self)
    
        self.models = LuaTableViewModel:getLuaTableViewModels()
    
        local view = toobjc(self:luaTableView())
        local orderNumberLabel = self:orderNumberLabel()
        self:addSubview(view)
        -- view:setFrame(CGRect(10,10,300,200))
        print("打印orderNumberLabel = " .. tostring(orderNumberLabel))
    
        toobjc(view):masUNDERxLINEmakeConstraints(
            toblock(
                function(make)
                    make:leading():equalTo()(orderNumberLabel:leftLabel():masUNDERxLINEtrailing())
                    make:trailing():equalTo()(self)
                    make:top():equalTo()(self)
                    make:bottom():equalTo()(self)
                end
                ,{"void", "MASConstraintMaker *"}
            )
        )
    
        print("打印view = " .. tostring(view))
        return nil
    end
    
    function tableView_numberOfRowsInSection(self, table, section)
        local count = toobjc(self.models):count()
        return count
    end
    
    function tableView_cellForRowAtIndexPath(self, table, indexPath)
        local cell = table:dequeueReusableCellWithIdentifier("cellID")
        if cell == nil then 
            cell = UITableViewCell:initWithStyle_reuseIdentifier(UITableViewCellStyleDefault, "cellID")
        end
        local text = string.format("第%d个cell", indexPath:row())
        cell:textLabel():setText(text)
        local model = self.models[indexPath:row() + 1]
        cell:textLabel():setText(model:title())
        print("model = " .. tostring(model:title()))
        return cell
    end
        
    -- 替换initSubViews方法
    function initSubViews(self)
        self:ORIGinitSubViews()
        self:initLuaSubViews(self)
    end
    
    
    -- 新增LuaTableViewModel类
    interface {"LuaTableViewModel", NSObject}
    
    -- 新增 title 属性
    function title(self)
        return self._title
    end
    
    function setTitle(self, title)
        self._title = title
    end
    
    -- 替换init方法
    function init(self)
        self.super:init()
        return self
    end
    
    -- 新增类方法(返回值和参数均为id类型) 
    function LuaTableViewModel:getLuaTableViewModels(self)
        -- 其中, start是起始值, limit是结束值, step是步进(可省, 默认是1).
        -- i是for循环的local变量, for循环之后i不存在.
        local arrays = {}
        for i = 10, 1, -1 do
            local model = LuaTableViewModel:init()
            local title = string.format("i = %s", tostring(i))
            model:setTitle(title)
            table.insert(arrays, model)
        end
        -- for i, v in pairs(arrays) do
        --  print("vtitle = " .. tostring(v:title()))
        -- end
        return arrays
    end
    
    hotfix lua语法
    -- OC CGFloat width = [UIScreen mainScreen].bounds.size.width;
    -- local width = UIScreen:mainScreen():bounds().width;
    
    -- Lua对象转换为OC对象:toobjc
    -- local testString = "Hello lua!";
    -- local bigFont = UIFont:boldSystemFontOfSize(30);
    -- local size = toobjc(testString):sizeWithFont(bigFont);
    -- puts(size);
    
    -- Lua或者OC对象转换为字符串:tostring
    -- local num = 123;
    -- local str = tostring(num);
    -- print(tostring(xxx));
    
    -- 调用类方法
    -- [UT commitEvent:123 arg1:@"456" arg2:@"789"];
    -- UT:commitEvent_arg1_arg2("123", "456", "789");
    
    -- 替换类方法
    -- function commitEvent_arg1_arg2(self, event, arg1, arg2);
    -- self:ORIGcommitEvent_arg1_arg2(event, arg1, arg2);
    
    -- 字典/数组
    -- toobjc(self:muteDict()):objectForKey("k1")
    -- toobjc(self:muteArray()):objectAtIndex(1)
    -- toobjc(self:muteDict()):setObject_forKey("v11", "k1")
    -- print(self:muteDict()["k1"])
    
     -- 新增方法(返回值和参数均为id类型)
     -- function myLostMethod(self)
     --         print("myLostMethod")
     --         return nil
     -- end
     -- function myLostMethod_other(self, a, b)
     --         print("myLostMethod_other");
     --         return nil
     --  end
    
    -- 新增属性
    -- 方式1:直接使用lua自带的新增属性功能,但是只能被lua使用
    -- self.xx = "abcd"
    -- print(self.xx)
    -- 方式2:模拟OC的增加属性功能,可以在OC访问
    -- function xxx(self)
    --    return self._xxx   
    -- end
    -- function setXxx(self, xxx)
    --    self._xxx = xxx
    -- end
    
    -- 正确使用Lua字符串(Lua string不能直接调用NSString方法,否则会报nil错误)
    -- local x = string.len(str)
    -- if not tempDeviceID == self:deviceID() then
    -- end
    -- string1 = "Lua" 
    -- string2 = "Tutorial"
    -- local s = string1 .. " abc " .. string2 --拼接
    -- print(string.format("基本格式化 %s %s",string1,string2))
    
    -- 将Lua字符串转成 OC NSString 对象,再调用NSString的OC方法
    -- local x = toobjc(str):length()
    -- if not toobjc(tempDeviceID):isEqualToString(self:deviceID()) then
    -- end
    -- NSString *x = NSStringFromClass(“TestVC”)用local x = self:class():description() 代替
    
    -- 日期格式化
    -- date = 2; month = 1; year = 2014
    -- print(string.format("日期格式化 %02d/%02d/%03d", date, month, year))
    
    -- 数组(下标从1开始!)
    -- local array = {"a", "b", "c"}
    -- table.insert(array, "d") --末尾添加
    -- table.insert(array, 2, "e") --第二个位置插入
    -- for i = 1, #array do
    --  print(array[i])
    -- end
    -- for i, v in pairs(array) do --i为下标
    --  print(v)
    -- end
    
    -- 字典
    -- local dict = {k1="v1", k2="v2"}
    -- print(dict["k1"]) 
    -- print(dict.k1)
    -- 获取到的对象已转为table,而table没有这些方法,想要使用OC的方法可以先通过toobjc
    -- toobjc(self:muteDict()):objectForKey("k1")
    -- toobjc(self:muteArray()):objectAtIndex(1)
    -- toobjc(self:muteDict()):setObject_forKey("v11", "k1")
    -- print(self:muteDict()["k1"])
    
    hotfix lua语法参考文档
    lua语法常见报错 attempt to index local 'make' (a nil value)
    -- 在lua中调用方法一定要用冒号“:”,不然会 attempt to index local 'make' (a nil value)
    

    相关文章

      网友评论

          本文标题:iOS hotfix lua语法

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