-- 重新实现TextField cc.TextField = class("TextField") cc.TextField.ClassName = "TextField" function cc.TextField:extend(node) cc.Text:extend(node); -- 把lua的类函数扩展给node(C++对象) node:extendClass(cc.TextField); node:setName("TextField") node.MaxLengthEnabled = false; node.MaxLength = 10; node.PasswordEnabled = false; node.PasswordStyleText = "*"; node.TouchAreaEnabled = false; node.TouchArea = cc.rect(0,0,200,50); node.PlaceHolder = ""; node.Text = ""; node.Listener = nil; local function onTouchBegan(touch , event) if node.TouchAreaEnabled then local nsp = node:convertToNodeSpace2D(touch:getLocation()); return cc.rectContainsPoint(node.TouchArea , nsp); else return node:hitTest(touch:getLocation()); end end local function onTouchMoved(touch , event) end local function onTouchEnded(touch , event) node:onInput(); end local function onTouchCancelled(touch , event) end -- 侦听点击通知 node:registerTouch(onTouchBegan , onTouchMoved , onTouchEnded , onTouchCancelled); end function cc.TextField:addEventListener(listener) self.Listener = listener; end -- 弹出输入框 function cc.TextField:onInput() local function onInputEnd(text) if not tolua.isnull(self) then self:setText(text); if self.Listener then self.Listener(self , cc.TextFiledEventType.enter); end end end if self.MaxLengthEnabled then --deviceInputBox("" , self.Text , self.MaxLength , onInputEnd); deviceInputBox("" , self.Text , 999999 , onInputEnd); else deviceInputBox("" , self.Text , 999999 , onInputEnd); end end function cc.TextField:create() local layer = cc.Text:create(); self:extend(layer); return layer; end function cc.TextField:setFontConfig(ttfConfig) self.OriginTexColor = ttfConfig.texColor; cc.Text.setFontConfig(self , ttfConfig); end function cc.TextField:setText(text) self.Text = text; local fontConfig = self:getFontConfig(); if text == "" then self.OriginTexColor = fontConfig.texColor; fontConfig.texColor = cc.c4b(149, 149, 149, 255); self:setString(self.PlaceHolder); else if self.OriginTexColor then fontConfig.texColor = self.OriginTexColor; end if self.PasswordEnabled then local text16 = Utf16:create(text); local size = text16:len(); text = string.rep(self.PasswordStyleText , size); end self:setString(text); end self:setFontConfig(fontConfig); end function cc.TextField:getText() return self.Text; end function cc.TextField:getString() return self.Text; end function cc.TextField:setTouchArea(size) self.TouchArea = size; end function cc.TextField:getTouchArea() return self.TouchArea end function cc.TextField:setTouchAreaEnabled(enable) self.TouchAreaEnabled = enable; end function cc.TextField:isTouchAreaEnabled() return self.TouchAreaEnabled end function cc.TextField:setPlaceHolder(value) self.PlaceHolder = value; end function cc.TextField:getPlaceHolder() return self.PlaceHolder end function cc.TextField:setMaxLengthEnabled(enable) self.MaxLengthEnabled = enable; end function cc.TextField:isMaxLengthEnabled() return self.MaxLengthEnabled end function cc.TextField:setMaxLength(length) self.MaxLength = length; end function cc.TextField:getMaxLength() return self.MaxLength end function cc.TextField:setPasswordEnabled(enable) self.PasswordEnabled = enable; end function cc.TextField:isPasswordEnabled() return self.PasswordEnabled end function cc.TextField:setPasswordStyleText(styleText) self.PasswordStyleText = styleText; end function cc.TextField:getPasswordStyleText() return self.PasswordStyleText end