hotfix lua语法
-- 替换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)
网友评论