0

I am trying to get CCTextFieldTTF to work in cocos sharp with Xamarin for an android application. But can't get hold of this for the life of me. Could not find any documentation on cocos sharp API either. Does anyone know how to use this class to render a text area in an android application? The reason I am asking is in a xamarin forum I saw someone saying that this does not work in the API yet. Any help would be highly appreciated. Thanks in advance.

javabot
  • 173
  • 10

1 Answers1

0

I have this working in android

Here is the sample code:

Create a node to track the textfield

    CCTextField trackNode;
    protected CCTextField TrackNode
    {
        get { return trackNode; }
        set
        {
            if (value == null)
            {
                if (trackNode != null)
                {
                    DetachListeners();
                    trackNode = value;
                    return;
                }
            }

            if (trackNode != value)
            {
                DetachListeners();
            }

            trackNode = value;
            AttachListeners();
        }
    }

//create the actual input textfield

var textField = new CCTextField(string.Empty, "Somefont", 25,  CCLabelFormat.SystemFont);
textField.IsColorModifiedByOpacity = false;
textField.Color = new CCColor3B(Theme.TextWhite);
textField.BeginEditing += OnBeginEditing;
textField.EndEditing += OnEndEditing;
textField.Position = new CCPoint (0, 0);
textField.Dimensions = new CCSize(VisibleBoundsWorldspace.Size.Width - (160 * sx),  vPadding);
textField.PlaceHolderTextColor = Theme.TextYellow;
textField.PlaceHolderText = Constants.TextHighScoreEnterNamePlaceholder;
textField.AutoEdit = true;
textField.HorizontalAlignment = CCTextAlignment.Center;
textField.VerticalAlignment = CCVerticalTextAlignment.Center;
TrackNode = textField;
TrackNode.Position = pos;

AddChild(textField);

// Register Touch Event
var touchListener = new CCEventListenerTouchOneByOne();
touchListener.OnTouchBegan = OnTouchBegan;
touchListener.OnTouchEnded = OnTouchEnded;
AddEventListener(touchListener);

// The events

        bool OnTouchBegan(CCTouch pTouch, CCEvent touchEvent)
        {
            beginPosition = pTouch.Location;
            return true;
        }

        void OnTouchEnded(CCTouch pTouch, CCEvent touchEvent)
        {
            if (trackNode == null)
            {
                return;
            }

            var endPos = pTouch.Location;

            if (trackNode.BoundingBox.ContainsPoint(beginPosition) && trackNode.BoundingBox.ContainsPoint(endPos))
            {
                OnClickTrackNode(true);
            }
            else
            {
                OnClickTrackNode(false);
            }
        }

        public void OnClickTrackNode(bool bClicked)
        {
            if (bClicked && TrackNode != null)
            {
                if (!isKeyboardShown) 
                {
                    isKeyboardShown = true;
                    TrackNode.Edit();   
                }

            }
            else
            {
                if (TrackNode != null)
                {
                    TrackNode.EndEdit();
                }
            }

        }

        private void OnEndEditing(object sender, ref string text, ref bool canceled)
        {
            //((CCNode)sender).RunAction(scrollDown);
            Console.WriteLine("OnEndEditing text {0}", text);
        }

        private void OnBeginEditing(object sender, ref string text, ref bool canceled)
        {
            //((CCNode)sender).RunAction(scrollUp);
            Console.WriteLine("OnBeginEditing text {0}", text);
        }

        void AttachListeners()
        {
            // Attach our listeners.
            var imeImplementation = trackNode.TextFieldIMEImplementation;
            imeImplementation.KeyboardDidHide += OnKeyboardDidHide;
            imeImplementation.KeyboardDidShow += OnKeyboardDidShow;
            imeImplementation.KeyboardWillHide += OnKeyboardWillHide;
            imeImplementation.KeyboardWillShow += OnKeyboardWillShow;
            imeImplementation.InsertText += InsertText;
        }

        void DetachListeners()
        {
            if (TrackNode != null)
            {
                // Remember to remove our event listeners.
                var imeImplementation = TrackNode.TextFieldIMEImplementation;
                imeImplementation.KeyboardDidHide -= OnKeyboardDidHide;
                imeImplementation.KeyboardDidShow -= OnKeyboardDidShow;
                imeImplementation.KeyboardWillHide -= OnKeyboardWillHide;
                imeImplementation.KeyboardWillShow -= OnKeyboardWillShow;
                imeImplementation.InsertText -= InsertText;
            }
        }

This is all taken from the link below but needed a bit of additional work to get it working on each platform. https://github.com/mono/cocos-sharp-samples/tree/master/TextField

Kodejack
  • 441
  • 4
  • 7