2014-01-25 2 views
0

Мы переносим игру libgdx в ios.
создать UITextField и установить делегат, вот код:о UITextFieldDelegate on ios

this.textField.setDelegate(new Delegate(textField)); 

public static class Delegate extends UITextFieldDelegate.Adapter 
{ 
    private UITextField mTextField; 

    public Delegate(UITextField textField) 
    { 
     this.mTextField = textField; 
    } 

    @Override 
    public void didBeginEditing(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "didBeginEditing"); 
    } 

    @Override 
    public void didEndEditing(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "didEndEditing"); 
    } 

    @Override 
    public boolean shouldBeginEditing(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "shouldBeginEditing"); 
     return true; 
    } 

    @Override 
    public boolean shouldChangeCharacters(UITextField textField, 
      NSRange range, String string) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "shouldChangeCharacters"); 
     return true; 
    } 

    @Override 
    public boolean shouldClear(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "shouldClear"); 
     return true; 
    } 

    @Override 
    public boolean shouldEndEditing(UITextField textField) { 
     // TODO Auto-generated method stub 
     Gdx.app.debug(TAG, "shouldEndEditing"); 
     return true; 
    } 

    @Override 
    public boolean shouldReturn(UITextField textField) { 
     // TODO Auto-generated method stub 
     if(this.mTextField == textField) 
     { 
      textField.resignFirstResponder(); 
     } 
     Gdx.app.debug(TAG, "shouldReturn"); 
     return true; 
    } 
} 

КСН тренажер, когда я нажимаю на текстовое поле, приложение будет врезаться, и нет никакого сообщения об ошибке на консоли. как его решить? Любая информация будет оценена! спасибо заранее!

ответ

0

Ваш экземпляр Delegate, вероятно, был GCed до его вызова. Попробуйте это:

Delegate delegate = new Delegate(textField); 
this.textField.setDelegate(delegate); 
this.textField.addStrongRef(delegate); 

addStrongRef(...) вызов предотвращает экземпляр Delegate Java от того GCed пока экземпляр UITextField Objective-C не освобождаться. Это необходимо, так как UITextField не сохраняет (увеличит количество ссылок) экземпляра, который вы задали в качестве делегата.

В будущей версии RoboVM вызов будет выполнен автоматически для вас.

Смежные вопросы