View

Getting a reference with SerializeField

[SerializeField] private TMPro.TMP_InputField idInputField;
[SerializeField] private TMPro.TMP_InputField passwordInputField;
[SerializeField] private Button signInButton;
  • ID Input Fields

  • PW input field

  • Login button

for the login button.

Exposing events with UniTask

public IUniTaskAsyncEnumerable<AsyncUnit> OnSignInButtonClickedAsync => signInButton.OnClickAsAsyncEnumerable();
public IUniTaskAsyncEnumerable<string> OnIdInputFieldEditAsync => idInputField.OnValueChangedAsAsyncEnumerable();
public IUniTaskAsyncEnumerable<string> OnPasswordInputFieldEditAsync => passwordInputField.OnValueChangedAsAsyncEnumerable();
  • Expose events using IUniTaskAsyncEnumerable.

    • Using IUniTaskAsyncEnumerable has the advantage of making your code easier to process and more readable, such as processing input through an input buffer or ignoring duplicate inputs while they are being processed.

  • These will be used by the Liftcycle (presenter) side.

Other Lifecycle-side methods to use

// ๋ทฐ์˜ ์ดˆ๊ธฐํ™”์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Lifecycle ์ธก์œผ๋กœ๋ถ€ํ„ฐ ๋ชจ๋ธ์„ ์ž…๋ ฅ๋ฐ›์•„ view์˜ ์ดˆ๊ธฐ ํ‘œํ˜„์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
public void SetView(SignInModalModel model)

// ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์˜ ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์กฐ์ ˆํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
public void SetSignInButtonInteractable(bool isInteractable)

// ํ˜„์žฌ ๋ทฐ์˜ ID/PW ์ž…๋ ฅ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
public LogInInfo GetCurrentInput()

Finished code

public class SignInModalView : ModalViewBase
    {
        [SerializeField] private TMPro.TMP_InputField idInputField;
        [SerializeField] private TMPro.TMP_InputField passwordInputField;
        [SerializeField] private Button signInButton;
    
        public IUniTaskAsyncEnumerable<AsyncUnit> OnSignInButtonClickedAsync => signInButton.OnClickAsAsyncEnumerable();
        public IUniTaskAsyncEnumerable<string> OnIdInputFieldEditAsync => idInputField.OnValueChangedAsAsyncEnumerable();
        public IUniTaskAsyncEnumerable<string> OnPasswordInputFieldEditAsync => passwordInputField.OnValueChangedAsAsyncEnumerable();
        
        public void SetView(SignInModalModel model)
        {
            // ์˜ˆ์‹œ์—์„œ๋Š” ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค๋งŒ,
            // ๋ทฐ์˜ ์ดˆ๊ธฐํ™” ์ •๋ณด๋ฅผ ๋ฐ›์•„ ํ™”๋ฉด์— ๋ฟŒ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
            // ์˜ˆ) ID/PW์˜ PlaceHolder text, ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€ ๋“ฑ๋“ฑ... ์„ ๊ตฌํ˜„ํ•˜๋ฉด ๊ดœ์ฐฎ๊ฒ ๋„ค์š”.
        }

        public void SetSignInButtonInteractable(bool isInteractable)
        {
            signInButton.interactable = isInteractable;
        }

        public LogInInfo GetCurrentInput()
        {
            return new LogInInfo(idInputField.text, passwordInputField.text);
        }
    }

    public class LogInInfo
    {
        public string ID { get; private set; }
        public string Password { get; private set; }
        
        public LogInInfo(string id, string password)
        {
            ID = id;
            Password = password;
        }
    }

Last updated