Unity input verileri geri tuşuna basınca siliniyor

DtEray

Hectopat
Katılım
30 Temmuz 2019
Mesajlar
116
Çözümler
4
Merhaba arkadaşlar,

Unity Android platformunda Input'a biseler yazıp geri tuşuna basınca input sifirlaniyor. Bunu nasıl iptal edebilirim. Çok can sıkıcı bise. Yardımcı olur musunuz? Internettede çözüm bulan olmamış. Yabancı kaynaklara kadar baktım. Simdiden teşekkürler.
 
Son düzenleyen: Moderatör:
C#:
void Start () {
    inputField = gameObject.GetComponent<TMP_InputField>();
    inputField.onEndEdit.AddListener(EndEdit);
    inputField.onValueChanged.AddListener(Editing);
    inputField.onTouchScreenKeyboardStatusChanged.AddListener(ReportChangeStatus);
}

private void ReportChangeStatus(TouchScreenKeyboard.Status newStatus) {
    if (newStatus == TouchScreenKeyboard.Status.Canceled)
        keepOldTextInField = true;
}

private void Editing(string currentText) {
    oldEditText = editText;
    editText = currentText;
}

private void EndEdit(string currentText) {
    if (keepOldTextInField && !string.IsNullOrEmpty(oldEditText)) {
        editText = oldEditText;
        inputField.text = oldEditText;
        keepOldTextInField = false;
    }
}
Bu şekilde dener misiniz? Event listener ekleyerek yazılan her harfte veriyi güncelliyoruz ve edit işlemi bittiğinde güncel veriyi input field içerisine ekliyoruz. Bu scripti input field'i bulunduran objeye verin.

 
C#:
void Start () {
    inputField = gameObject.GetComponent<TMP_InputField>();
    inputField.onEndEdit.AddListener(EndEdit);
    inputField.onValueChanged.AddListener(Editing);
    inputField.onTouchScreenKeyboardStatusChanged.AddListener(ReportChangeStatus);
}

private void ReportChangeStatus(TouchScreenKeyboard.Status newStatus) {
    if (newStatus == TouchScreenKeyboard.Status.Canceled)
        keepOldTextInField = true;
}

private void Editing(string currentText) {
    oldEditText = editText;
    editText = currentText;
}

private void EndEdit(string currentText) {
    if (keepOldTextInField && !string.IsNullOrEmpty(oldEditText)) {
        editText = oldEditText;
        inputField.text = oldEditText;
        keepOldTextInField = false;
    }
}
Bu şekilde dener misiniz? Event listener ekleyerek yazılan her harfte veriyi güncelliyoruz ve edit işlemi bittiğinde güncel veriyi input field içerisine ekliyoruz. Bu scripti input field'i bulunduran objeye verin.

Cevap için teşekkürler. Bu kodu çok denedim ama yapamadım. Sürekli hata alıyorum bunda
 
Öncelikle yaptım işlemleri anlatayım. Bu kodları bir script dosyasına atıyorum.
Hatayı gönderebilir misin? Yardımcı olayım.

Merhaba önce kodlarımı göndereyim. Yanlışlık var mı acaba? Benim ki TMP değil orayı düzelttim.

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class input : MonoBehaviour
{
    private InputField inputField;

    void Start()
    {
        inputField = gameObject.GetComponent<InputField>();
        inputField.onEndEdit.AddListener(EndEdit);
        inputField.onValueChanged.AddListener(Editing);
        inputField.onTouchScreenKeyboardStatusChanged.AddListener(ReportChangeStatus);
    }

    private void ReportChangeStatus(TouchScreenKeyboard.Status newStatus)
    {
        if (newStatus == TouchScreenKeyboard.Status.Canceled)
            keepOldTextInField = true;
    }

    private void Editing(string currentText)
    {
        oldEditText = editText;
        editText = currentText;
    }

    private void EndEdit(string currentText)
    {
        if (keepOldTextInField && !string.IsNullOrEmpty(oldEditText))
        {
            editText = oldEditText;
            inputField.text = oldEditText;
            keepOldTextInField = false;
        }
    }

    void Update()
    {
        
    }
}

C#:
void Start () {
    inputField = gameObject.GetComponent<TMP_InputField>();
    inputField.onEndEdit.AddListener(EndEdit);
    inputField.onValueChanged.AddListener(Editing);
    inputField.onTouchScreenKeyboardStatusChanged.AddListener(ReportChangeStatus);
}

private void ReportChangeStatus(TouchScreenKeyboard.Status newStatus) {
    if (newStatus == TouchScreenKeyboard.Status.Canceled)
        keepOldTextInField = true;
}

private void Editing(string currentText) {
    oldEditText = editText;
    editText = currentText;
}

private void EndEdit(string currentText) {
    if (keepOldTextInField && !string.IsNullOrEmpty(oldEditText)) {
        editText = oldEditText;
        inputField.text = oldEditText;
        keepOldTextInField = false;
    }
}
Bu şekilde dener misiniz? Event listener ekleyerek yazılan her harfte veriyi güncelliyoruz ve edit işlemi bittiğinde güncel veriyi input field içerisine ekliyoruz. Bu scripti input field'i bulunduran objeye verin.


Bu kodlar çok eski bazıları çalışmıyor.

Sorunum devam ediyor. Ücretli olarak yardımcı olmak isteyen varsa bana ulaşabilir. Çünkü bu sorundan kurtulmak istiyorum artık.
 
Son düzenleme:
Öncelikle yaptım işlemleri anlatayım. Bu kodları bir script dosyasına atıyorum.


Merhaba önce kodlarımı göndereyim. Yanlışlık var mı acaba? Benim ki TMP değil orayı düzelttim.

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class input : MonoBehaviour
{
    private InputField inputField;

    void Start()
    {
        inputField = gameObject.GetComponent<InputField>();
        inputField.onEndEdit.AddListener(EndEdit);
        inputField.onValueChanged.AddListener(Editing);
        inputField.onTouchScreenKeyboardStatusChanged.AddListener(ReportChangeStatus);
    }

    private void ReportChangeStatus(TouchScreenKeyboard.Status newStatus)
    {
        if (newStatus == TouchScreenKeyboard.Status.Canceled)
            keepOldTextInField = true;
    }

    private void Editing(string currentText)
    {
        oldEditText = editText;
        editText = currentText;
    }

    private void EndEdit(string currentText)
    {
        if (keepOldTextInField && !string.IsNullOrEmpty(oldEditText))
        {
            editText = oldEditText;
            inputField.text = oldEditText;
            keepOldTextInField = false;
        }
    }

    void Update()
    {
       
    }
}



Bu kodlar çok eski bazıları çalışmıyor.

Sorunum devam ediyor. Ücretli olarak yardımcı olmak isteyen varsa bana ulaşabilir. Çünkü bu sorundan kurtulmak istiyorum artık.
Hocam hataları gönderecektiniz? Kodlarınızda bir anormallik gözükmüyor.
 
Hocam hataları gönderecektiniz? Kodlarınızda bir anormallik gözükmüyor.
Dostum şuan askerdeyim bilgisayar icin zaman bulursam hataları göndercem. İlgilendiğin icin sağol 😊

Hocam hataları gönderecektiniz? Kodlarınızda bir anormallik gözükmüyor.
Tekrardan merhaba Irak'taydım yeni gelebildim. Sorun nerede acaba 🥹

@Kxaan kodları aşağıdaki gibi değiştirdim. Şuan hata almıyorum. Ama kod çalışmıyor. Telefonda input içine bişe yazıp geri tuşuna basınca gene siliniyor :(


Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class inputScript : MonoBehaviour
{
    private InputField inputField;
    private string oldEditText = "";
    private string editText = "";
    private bool keepOldTextInField = false;

    void Start()
    {
        inputField = GameObject.Find("userIDBox").GetComponent<InputField>();
        inputField.onEndEdit.AddListener(EndEdit);
        inputField.onValueChanged.AddListener(Editing);
    }


    private void Editing(string currentText)
    {
        oldEditText = editText;
        editText = currentText;
    }

    private void EndEdit(string currentText)
    {
        if (keepOldTextInField && !string.IsNullOrEmpty(oldEditText))
        {
            editText = oldEditText;
            inputField.text = oldEditText;
            keepOldTextInField = false;
        }
    }

    void Update()
    {
    }
}

Editing kısmı çalışıyor ama EndEdit kısmı çalışmıyor.

Dostum şuan askerdeyim bilgisayar icin zaman bulursam hataları göndercem. İlgilendiğin icin sağol 😊


Tekrardan merhaba Irak'taydım yeni gelebildim. Sorun nerede acaba 🥹

@Kxaan kodları aşağıdaki gibi değiştirdim. Şuan hata almıyorum. Ama kod çalışmıyor. Telefonda input içine bişe yazıp geri tuşuna basınca gene siliniyor :(


Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class inputScript : MonoBehaviour
{
    private InputField inputField;
    private string oldEditText = "";
    private string editText = "";
    private bool keepOldTextInField = false;

    void Start()
    {
        inputField = GameObject.Find("userIDBox").GetComponent<InputField>();
        inputField.onEndEdit.AddListener(EndEdit);
        inputField.onValueChanged.AddListener(Editing);
    }


    private void Editing(string currentText)
    {
        oldEditText = editText;
        editText = currentText;
    }

    private void EndEdit(string currentText)
    {
        if (keepOldTextInField && !string.IsNullOrEmpty(oldEditText))
        {
            editText = oldEditText;
            inputField.text = oldEditText;
            keepOldTextInField = false;
        }
    }

    void Update()
    {
    }
}

Editing kısmı çalışıyor ama EndEdit kısmı çalışmıyor.
Aşağıdaki if şartını kaldırınca kod çalışmaya başladı.

Kod:
if (keepOldTextInField && !string.IsNullOrEmpty(oldEditText))        {}
 

Dosya Ekleri

  • hatalar.PNG
    hatalar.PNG
    67,4 KB · Görüntüleme: 17
Son düzenleme:
Kusura bakmayın geç gördüm. Sorun çözüldü değil mi?
Şöyle bişe var. Geri tuşuna basınca sorunsuz çalışıyor. Ama ekrana tıklayınca son karakteri yazmıyor.
Örnek veriyorum. Elma yazdım geri tuşuna bastım Elma'yı yazıyor. Ama ekrana tıklayıp klavyeyi kapatınca "Elm" yazıyor.

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class inputScript : MonoBehaviour
{
    private InputField inputField;
    private string oldEditText = "";
    private string editText = "";
    private bool keepOldTextInField = false;

    void Start()
    {
        inputField = GameObject.Find("userIDBox").GetComponent<InputField>();
        inputField.onEndEdit.AddListener(EndEdit);
        inputField.onValueChanged.AddListener(Editing);
    }


    private void Editing(string currentText)
    {
        oldEditText = editText;
        editText = currentText;
        Debug.Log("editing çalışıyor");
    }

    private void EndEdit(string currentText)
    {
        
            editText = oldEditText;
            inputField.text = oldEditText;
            keepOldTextInField = false;
            Debug.Log("EndEdit çalışıyor");
        
    }

    void Update()
    {
    }
}

@Kxaan bakabildiniz mi kodlara
 
Son düzenleme:
Şöyle bişe var. Geri tuşuna basınca sorunsuz çalışıyor. Ama ekrana tıklayınca son karakteri yazmıyor.
Örnek veriyorum. Elma yazdım geri tuşuna bastım Elma'yı yazıyor. Ama ekrana tıklayıp klavyeyi kapatınca "Elm" yazıyor.

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class inputScript : MonoBehaviour
{
    private InputField inputField;
    private string oldEditText = "";
    private string editText = "";
    private bool keepOldTextInField = false;

    void Start()
    {
        inputField = GameObject.Find("userIDBox").GetComponent<InputField>();
        inputField.onEndEdit.AddListener(EndEdit);
        inputField.onValueChanged.AddListener(Editing);
    }


    private void Editing(string currentText)
    {
        oldEditText = editText;
        editText = currentText;
        Debug.Log("editing çalışıyor");
    }

    private void EndEdit(string currentText)
    {
       
            editText = oldEditText;
            inputField.text = oldEditText;
            keepOldTextInField = false;
            Debug.Log("EndEdit çalışıyor");
       
    }

    void Update()
    {
    }
}

@Kxaan bakabildiniz mi kodlara
Evet biraz inceledim fakat son harfi silmesine bir mantık bulamadım. Büyük ihtimal onValueChanged eventi ile alakalı ancak çözemedim.
 

Geri
Yukarı